Git 不是提取所有文件而是检查一个分支有它们吗?
Git not pulling all files but checking out a branch has them?
所以我在分支 A。我这样做 git pull origin master
它告诉我我是最新的。我签出 master 并看到文件 1。我签出分支 A 并且文件 1 不存在,即使它告诉我我是最新的。
我再次检查 master,创建分支 B。我检查分支 B,文件 1 在那里。我 git 拉出原点 A 并且文件 1 不再存在。如果我反转过程并创建 B 然后从 A 推送到 B,也会发生同样的情况。所以此时我无法推送到 master,因为看起来我将删除很多需要的文件,但我无法拉取并获取它们。
我对分支 A 进行了更改,但我没有删除任何文件。出于某种原因,它就像我删除了文件 1,即使我不小心删除了它,为什么不拉 return 给我呢?
有什么方法可以告诉 git 将所有丢失的文件从一个分支转到另一个分支?
您在分支 A 中的一个提交删除了您关心的一个(或多个)文件。既然你说你不能因此而推送分支 A,我假设你还没有发布你的历史,并且想重写它。
要找到删除文件的提交,请尝试:
git log --stat master..A
然后尝试:
git checkout A
git rebase -i master
并用 'e' 标记您想要修复以进行编辑的提交。
然后使用查看该提交的状态:
git status
并撤消对这些文件的删除:
git reset file-that-was-deleted
git checkout -- file-that-was-deleted
并恢复变基:
git rebase --continue
根据您的描述,您似乎删除了branchA中的File1。当从 origin/master
拉取时,Git 看到 origin/master
中的 File1 没有发生任何事情,并且该文件已在 branchA 中删除,因此当它合并它们时,合并干净,就像删除 File1 一样。请记住,"pull" 只是一种获取并自动合并两个分支的方法。
如果要在分支 A 上恢复 File1,有几个选项。如果您还没有推送它,一种选择就是变基并摆脱删除。或者,您可以 运行 git checkout master -- File1
检查 master 上存在的 File1 的版本,并将其添加到 branchA 上的提交以将其添加回来。
如果你想比较分支,git diff
就足够了。如果只想查看添加、删除或更改了哪些文件,可以使用 git diff --stat
。尝试执行 git diff --stat master origin/master
以查看主分支和 origin/master
.
之间发生了什么变化
使用 gitk
或 git log --graph --decorate --oneline
可视化这些变化也很有用。 gitk master...origin/master
或 gitk origin/master...branchA
可以帮助您查看其中一个分支中有哪些提交,而另一个分支中没有。
所以我在分支 A。我这样做 git pull origin master
它告诉我我是最新的。我签出 master 并看到文件 1。我签出分支 A 并且文件 1 不存在,即使它告诉我我是最新的。
我再次检查 master,创建分支 B。我检查分支 B,文件 1 在那里。我 git 拉出原点 A 并且文件 1 不再存在。如果我反转过程并创建 B 然后从 A 推送到 B,也会发生同样的情况。所以此时我无法推送到 master,因为看起来我将删除很多需要的文件,但我无法拉取并获取它们。
我对分支 A 进行了更改,但我没有删除任何文件。出于某种原因,它就像我删除了文件 1,即使我不小心删除了它,为什么不拉 return 给我呢?
有什么方法可以告诉 git 将所有丢失的文件从一个分支转到另一个分支?
您在分支 A 中的一个提交删除了您关心的一个(或多个)文件。既然你说你不能因此而推送分支 A,我假设你还没有发布你的历史,并且想重写它。
要找到删除文件的提交,请尝试:
git log --stat master..A
然后尝试:
git checkout A
git rebase -i master
并用 'e' 标记您想要修复以进行编辑的提交。
然后使用查看该提交的状态:
git status
并撤消对这些文件的删除:
git reset file-that-was-deleted
git checkout -- file-that-was-deleted
并恢复变基:
git rebase --continue
根据您的描述,您似乎删除了branchA中的File1。当从 origin/master
拉取时,Git 看到 origin/master
中的 File1 没有发生任何事情,并且该文件已在 branchA 中删除,因此当它合并它们时,合并干净,就像删除 File1 一样。请记住,"pull" 只是一种获取并自动合并两个分支的方法。
如果要在分支 A 上恢复 File1,有几个选项。如果您还没有推送它,一种选择就是变基并摆脱删除。或者,您可以 运行 git checkout master -- File1
检查 master 上存在的 File1 的版本,并将其添加到 branchA 上的提交以将其添加回来。
如果你想比较分支,git diff
就足够了。如果只想查看添加、删除或更改了哪些文件,可以使用 git diff --stat
。尝试执行 git diff --stat master origin/master
以查看主分支和 origin/master
.
使用 gitk
或 git log --graph --decorate --oneline
可视化这些变化也很有用。 gitk master...origin/master
或 gitk origin/master...branchA
可以帮助您查看其中一个分支中有哪些提交,而另一个分支中没有。