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

3
我一个月前从主分支分支出来,然后开始进行一个大型项目的开发。最后将分支合并回主分支时,如预期一样发生了合并冲突,我解决了这些冲突并提交了合并请求。现在几天过去了,我正在测试一些代码,发现主分支上的某些更改不见了。问题是:我的冲突解决有误吗?还是Git自动合并了那个更改?换句话说,在Git中是否有一种方法可以查看合并提交并知道哪些文件存在冲突以及它们是如何被解决的?我所说的情况的图片(我很注重视觉效果)
|
+ <-------------------------+ Merge back to master
|                           |
+ -- Change that got lost   +
|                           |
+-------------------------> + My branch
|
master
git show merge-commit-id对我来说不起作用。我正在使用带有Git的Visual Studio Team Explorer。我可以清楚地看到合并提交中代码已丢失(以红色显示),但我不知道它是冲突解决还是自动Git合并。我提问的原因是因为我在主分支上有许多其他更改,我想确保它们仍然存在。谢谢。
(我可以撤销合并提交并重新执行,但会有很多冲突需要再次解决...那是我的唯一选择吗?)

哇。看着这么久以前的问题,我现在认为更好的答案是使用更好的git工作流程,比如... gitflow!我不再有大的合并冲突了。 - Jess
在 Git 2.36 (2022 年第二季度) 中,git log --remerge-diff 可以帮助您并显示过去合并决策中所做的更改!请参见我对另一个问题的回答 - VonC
1个回答

1

正如您所建议的那样,重新运行合并是最好的选择。但是您不必还原它,只需使用临时分支重复即可。如果$M是合并提交,则:

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

即创建一个指向合并提交的第一个父提交的新分支,然后合并第二个父提交。请注意,您需要使用与原始合并相同的-s(合并策略)和/或-X(策略选项)选项才能获得完全相同的冲突。
此时,git status显示有冲突的文件,可以使用git log --merge和git log --merge --查看导致冲突的提交。
如果您知道某些文件已正确解决,则可以从原始合并冲突中获取它们的解决方案,如下所示:
$ git checkout $M -- <files ...>
$ git add <files ...>

这可以帮助减少理解大型合并所涉及的心理负担。

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