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.

之间发生了什么变化

使用 gitkgit log --graph --decorate --oneline 可视化这些变化也很有用。 gitk master...origin/mastergitk origin/master...branchA 可以帮助您查看其中一个分支中有哪些提交,而另一个分支中没有。