【发布时间】:2013-01-01 13:49:05
【问题描述】:
我们称其为 Aaron 的同事被指派对网站的一个部分进行翻新,这是一项长期项目。他创建了一个新的 Git 分支,名为 aaron。他所有的更改都是在这个分支上进行的。在他工作的同时,我继续维护整个网站,将我的更改提交给master。
最终,Aaron 将他的分支合并到了master。这以某种方式恢复了我在合并时间和首次创建aaron 分支之间对master 所做的所有提交。如果我输入 git show <hash of merge commit>,我可以看到我在 Aaron 在他的分支上工作时更改的每个文件的差异。这些差异显示了我所做的每一个更改的还原。如果 Aaron 手动将其分支上每个文件的内容复制到 master 并提交更改,它看起来就是这样。 (他没有这样做。我只是想说明日志显示的内容。)
根据 Aaron 的说法,他没有做任何奇怪的事情。他说他刚刚跑了git pull origin/aaron。
是什么原因造成的? git pull origin aaron 是否有可能将我对master 所做的所有更改都还原为master?
另外,有没有一种简单的方法可以将我的更改恢复到 master 而不恢复他的所有工作?
编辑 1:
在master 中更改并在合并后恢复的文件之一是foo.txt。所以我这样做了:
git checkout aaron
git log foo.txt
日志确实不反映在aaron 分支创建之后对foo.txt 的任何更改。我有点期待在aaron 分支的日志中某处看到我的更改的恢复,但我没有。那么,这是否是 Aaron 所做的其他事情的最终证据,而不是他声称所做的简单拉动?
编辑 2:
我说他输入了origin/aaron,但他实际上输入了origin aaron。我在上面改了。
编辑 3
根据下面的建议,我选择通过重写历史来解决这个问题。在这一点上,我确信问题是由错误的解决冲突的尝试引起的。
【问题讨论】:
-
如果您使用 gitk 查看日志,Aaron 的合并提交中是否列出了已更改的文件?
-
是的,所有恢复的文件都被列为已更改。差异非常清楚地表明了这一点:对于我对 master 所做的每一次更改,差异中都有一个部分在还原更改。 (即您可以看到各个行被改回。)
-
哎呀,错过了你所说的。
标签: git branch git-branch branching-and-merging