给定合并提交 SHA1,您如何查看/显示已完成的 git 合并冲突解决?
Posted
技术标签:
【中文标题】给定合并提交 SHA1,您如何查看/显示已完成的 git 合并冲突解决?【英文标题】:How do you see / show a git merge conflict resolution that was done, given a merge commit SHA1? 【发布时间】:2013-02-23 00:51:59 【问题描述】:当您解决冲突,然后暂存更改,然后执行 git diff 时,它会显示两列 + 和 -,一列用于“我们的”,另一列用于“他们的”。鉴于 repo 的 git 历史记录中的合并提交,我如何查看由其他人完成的解决方案?在其他情况下,我以前见过它(我认为是在 gitk 中),但我似乎无法确定我拥有的这个 SHA1。
【问题讨论】:
"然后做一个 git diff,它会显示两列 + 和 - ,一列是“我们的”,一列是“他们的””……是吗?你的 git 是如何配置的? @gcbenison:它仅在您处理合并冲突时,在您提交冲突解决方案之前执行此操作。我认为这不需要任何特殊配置。 【参考方案1】:如果您知道 ref,那么git show <MERGE_COMMIT>
将向您显示为合并提交完成的解决方案(如果有)。
对于日志,请使用 git log -p -c
或 git log -p --cc
。来自 git log 的手册页:
-c
With this option, diff output for a merge commit shows the differences from each
of the parents to the merge result simultaneously instead of showing pairwise
diff between a parent and the result one at a time. Furthermore, it lists only
files which were modified from all parents.
--cc
This flag implies the -c option and further compresses the patch output by
omitting uninteresting hunks whose contents in the parents have only two
variants and the merge result picks one of them without modification.
【讨论】:
我自己发现了这一点,但无论如何我都会给你投票和接受。 这有点工作。我仍然看到一堆仅由一个合并负责人引入的更改,我不确定是否可能是因为我连续有 2 个合并提交?我看到了所有无趣的冲突解决方案(由 kdiff3 解决)和有趣的解决方案。我确实注意到有趣的前缀是 ++ 而不是 + 或 - 如果分辨率与base相同,则不显示分辨率差异。 事实上,如果分辨率与任何一方的更改相同,它不会显示任何差异【参考方案2】:轻微的自行车棚:您可以使用 diff3 或 kdiff3 反向查看合并,特别是如果它是(git 风格)“邪恶”合并,其中引入了辅助更改来解决冲突。 (注意一个爆炸的脑袋,试图看看它是如何“退出”这些变化的;-)
显然,“基础”提交将是合并提交。
【讨论】:
以上是关于给定合并提交 SHA1,您如何查看/显示已完成的 git 合并冲突解决?的主要内容,如果未能解决你的问题,请参考以下文章