【问题标题】:Git - View conflict resolutions after merge commitGit - 合并提交后查看冲突解决方案
【发布时间】:2015-11-11 14:21:43
【问题描述】:

一个月前,我从 master 离职,从事一个大项目。然后我将它合并回master。毫不奇怪,有合并冲突。我解决了它们并提交了合并。现在几天后我正在测试一些代码,我发现在 master 上所做的一些更改已经消失。问题:我是否搞砸了我的冲突解决方案,或者 git 是否自动合并了该更改?换句话说,在 git 中有没有办法查看合并提交并知道哪些文件有冲突以及它们是如何解决的?

我在说什么的图片。 (我是视觉的)

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

git show merge-commit-id 不是为我做的。我在团队资源管理器中使用带有 git 的 Visual Studio。我可以清楚地看到代码在合并提交中丢失(红色),但我不知道这是冲突解决还是自动 git 合并。我问的原因是因为我在 master 上还有许多其他更改,我想确保它们仍然存在。谢谢。

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

【问题讨论】:

  • 哇。从很久以前看这个问题,我认为现在更好的答案是使用更好的 git 工作流程,例如... gitflow!我没有大的合并冲突了。
  • 使用 Git 2.36(2022 年第 2 季度),git log --remerge-diff 可以帮助您并向您展示在过去的合并解决方案中所做的事情!见my answer to this other question

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


【解决方案1】:

按照您的建议,重新运行合并是您的最佳选择。但是您不必还原它,您可以使用临时分支重复它。如果$M 是合并提交,那么:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 2021-07-28
    • 2015-10-15
    • 2013-02-23
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    相关资源
    最近更新 更多