Git - 在合并提交后查看冲突解决方案

时间:2015-11-11 14:21:44

标签: git visual-studio-2013 merge team-explorer

我在一个月前离开了大师,并参与了一个大项目。然后我把它合并回主人。毫不奇怪,存在合并冲突。我解决了他们并提交了合并。几天后,我正在测试一些代码,我发现一些代码已经消失了。问题:我是否搞砸了我的冲突解决方案,还是git自动合并了这个改变?换句话说,是否有一种方法可以让git查看合并提交并知道哪些文件存在冲突以及它们是如何解决的?

我正在谈论的图片。 (我是视觉)

|
+ <-------------------------+ Merge back to master
|                           |
+ -- Change that got lost   +
|                           |
+-------------------------> + My branch
|
master

git show merge-commit-id并没有为我做这件事。我在团队资源管理器中使用Visual Studio和git。我可以清楚地看到代码在合并提交中丢失了(红色),但我不知道它是冲突解决方案还是自动git合并。我问的原因是因为我对主人有很多其他的改变,我想确保它仍在那里。谢谢。

(我可以恢复合并提交并再次执行,但会有很多冲突再次解决...这是我唯一的选择吗?)

1 个答案:

答案 0 :(得分:1)

如你所知,重新运行合并是最好的选择。但是,您不必还原它,您可以使用临时分支重复它。如果$M是合并提交,则:​​

$ git checkout -b merge-redo ${M}^1
$ git merge ${M}^2

也就是说,创建一个指向合并提交的第一个父级的新分支,然后在第二个父级中合并。请注意,您需要使用原始合并中使用的相同-s(合并策略)和/或-X(策略选项)选项,以便获得完全相同的冲突。

此时,git status显示冲突的文件,git log --mergegit log --merge -- <files>可用于查看导致冲突的提交。

如果您知道某些文件已正确解析,您可以从原始合并冲突中获取解决方案,如下所示:

$ git checkout $M -- <files ...>
$ git add <files ...>

这有助于减少理解大型合并所涉及的心理负担。