Pis*_*tos 27 git merge conflict resolution
当您解决冲突,然后暂存更改,然后执行git diff,它会显示两列+'和-s,一列用于"我们的",一列用于"他们的".鉴于repo的git历史中的合并提交,我如何看到由其他人完成的解决方案?在其他情况下,我之前已经看过它(我认为是gitk),但我似乎无法确定我拥有的SHA1.
mic*_*ses 38
如果你知道ref,那么git show <MERGE_COMMIT>将显示合并提交完成的解决方案(如果有的话).
对于日志,使用git log -p -c或git log -p --cc.从git日志的联机帮助页:
-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.
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 28
最近(2022 年,九年后)的选项是:
git log --remerge-diff
Run Code Online (Sandbox Code Playgroud)
在 Git 2.36(2022 年第 2 季度)中,“ git log --remerge-diff” (man)显示了机械合并结果与合并提交中实际记录的结果之间的差异。
请参阅提交 0dec322、提交 0d83d82、提交 20323d1、提交 95433ee、提交 6054d1a、提交 a28d094、提交 24dbdab、提交 35f6967、提交 7b90ab4、提交 db757e8(2022 年 2 月 2 日),作者:Elijah Newren ( newren)。
请参阅Junio C Hamano ( )的提交 5046831(2021 年 12 月 21 日)。(由Junio C Hamano 合并 -- --在提交 90b7153中,2022 年 2 月 16 日)gitster
gitster
show, log:提供 --remerge-diff 功能签署人:伊利亚·纽伦
指定此选项时,我们重新合并所有(两个父级)合并提交并将实际合并提交与自动创建的版本进行比较,以向用户展示如何:
- 删除了冲突标记,
- 解决了不同的冲突版本,以及
- 可能在冲突区域之外添加新的更改**,以解决语义合并问题(或者可能只是为了隐藏其他随机更改)。
此功能的工作原理是创建临时对象目录并将其标记为主对象存储。
这使得自动合并期间创建的任何 blob 或树都可以轻松删除,只需从临时对象目录中删除所有对象即可。从以下几个方面来看,此实现不是最理想的:
log --remerge-diff变得很慢,因为运行时临时对象目录可能会填充许多松散的对象- 日志输出可能会因错误放置的“警告:无法合并二进制文件”消息而变得混乱,因为
ll-merge.c在运行时无条件地将这些消息写入 stderr,而不是允许调用者管理它们。- 重要的冲突和警告消息被简单地删除;因此,对于诸如修改/删除或重命名/重命名或文件/目录等无法用内容冲突标记表示的冲突,用户可能无法知道
--remerge-diff存在已解决的冲突(并且可能激发其他冲突)合并提交中的更改)。- 修复上一个问题时,请注意,可能会开始包含一些不重要的冲突和警告消息。
我们应该确保这些仍然被丢弃。
后续提交将解决这些问题。
diff-options现在包含在其手册页中:
--diff-merges=(off|none|on|first-parent|1|separate|m|combined|c|dense-combined|cc|remerge|r)
diff-options现在包含在其手册页中:
--diff-merges=remerge:
--diff-merges=r:
--remerge-diff:使用此选项,两个父级合并提交将被重新合并以创建一个临时树对象 - 可能包含带有冲突标记等的文件。
然后会显示该临时树和实际合并提交之间的差异。
使用此选项时发出的输出可能会发生变化,它与其他选项的交互也是如此(除非明确记录)。
请注意,上述提交之一在 With Git 2.36(2022 年第 2 季度)中有所恢复:
请参阅Elijah Newren ( )的提交 624a935(2022 年 3 月 2 日)。(由Junio C Hamano 合并 -- --提交8b44e05,2022 年 3 月 13 日)newren
gitster
merge-ort:默认从内部合并中排除消息签署人:伊利亚·纽伦
当 被设置为 5 时,merge-recursive 只会报告来自内部合并的消息。
GIT_MERGE_VERBOSITY对 执行相同的操作merge-ort。请注意,基于以下两个事实,在某种程度上会恢复0d83d82(“
merge-ort:将内部合并中的冲突/警告消息标记为可省略”,2022-02-02,Git v2.36.0 -在第 4 批批次中列出):