git合并后文件丢失问题

8

几周前我创建了一个功能分支,我正在开发中。已经有几个提交和一些新文件了。我可以从主分支切换到我的开发分支和反之,一切都很好。

今天我尝试将我的分支合并回主分支。因此,我切换到主分支并调用

git merge mydevbranch

由此导致了多个合并冲突。我通过解决这些冲突来进行了合并。
git mergetool

但是现在我意识到,在我要提交的结果中有一些文件丢失了。 所以有两个问题:合并后不应该在我的硬盘上有所有已合并的文件吗?我该如何继续获取真正的合并结果(主分支+我的特性分支)。


如果在我的开发分支中存在某个文件,而在主分支中却缺失了该文件,这意味着你可能在其中一个分支中将其删除,然后选择了错误的分支来保留。 - Asenar
该文件是 dev 分支中的新文件。 - Martin H.
1
git log --pretty=oneline --stat --all path/to/missing/files 这个命令会给你有趣的输出吗?另外,你确定你已经执行了 "git add && git commit" 命令吗?如果你切换到 dev 分支,那么这些文件是否还在呢? - Asenar
是的,当我检出开发分支时,所有文件都在那里。因此,在那里提交的应该是正确的。 - Martin H.
1
git show HEAD --stat 显示这些文件被删除了吗? - Asenar
显示剩余2条评论
4个回答

6

经过一番调查,我发现以下情况。在创建分支之前,在我的主分支上添加了这个文件(这就是为什么它出现在我的开发分支中)。但是现在的问题是:这个文件后来被同事删除了,但没有任何状态信息。状态日志只显示了该文件的创建。因此,合并操作是正确的,但由于缺少状态信息,对我来说不太容易理解。


我也经历过类似的事情。这怎么可能呢?你想发另一个问题并提供详细信息让别人来看看吗? - Boyang

3

暂存区没有任何内容。该文件已在开发分支中提交了几周,我已经阅读了整本书的相关章节,但是没有成功。我切换到主分支,调用合并命令,但有一些文件丢失了。只要不是所有文件都存在,我就不会提交(这对我来说似乎是正确的)。 - Martin H.

1
无法以那种方式丢失文件。您可以尝试以下替代方法:
git checkout mydevbranch
# following command to find the previous state easier if you are not familiar with reflog
git branch tmp-checkpoint 
git rebase master

然后解决冲突。如果文件仍然丢失,您可以使用git bisect(参见手册)查找它们消失的点。


1
这种方法包含了解决问题所需的命令语法。 - John

1
对于您的第一个问题:合并后我的硬盘上不应该有所有合并的项目吗?
我在自己的环境中进行了实验,效果与您相同。因此我的结论是,如果您合并具有相同文件的开发分支,则在主分支中删除的文件不会重新出现在主分支中。
我认为这很有道理。假设您已经在主分支中删除了许多不需要的文件,并提交了这些删除操作。然后您合并了具有所有这些不需要文件的开发分支。如果所有这些不需要的文件再次“添加”到主分支中,您可能会感到沮丧,因为您必须再次花时间将它们删除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接