此处的大多数答案都需要一个干净的工作目录和多个交互步骤(不利于脚本编写),或者不适用于所有情况,例如,过去的合并已将一些出色的更改带入目标分支,或者执行了相同。
要真正了解master
分支合并后的变化develop
,现在:
git merge-tree $(git merge-base master develop) master develop
由于这是一个管道命令,它不能猜测您的意思,因此必须明确。它还不会使输出着色或使用您的寻呼机,因此完整的命令应为:
git merge-tree $(git merge-base master develop) master develop | colordiff | less -R
— https://git.seveas.net/previewing-a-merge-result.html
(感谢David Normington提供的链接)
PS:
如果您遇到合并冲突,它们将在输出中显示出通常的冲突标记,例如:
$ git merge-tree $(git merge-base a b ) a b
added in both
our 100644 78981922613b2afb6025042ff6bd878ac1994e85 a
their 100644 61780798228d17af2d34fce4cfbdf35556832472 a
@@ -1 +1,5 @@
+<<<<<<< .our
a
+=======
+b
+>>>>>>> .their
@dreftymac用户是一个很好的观点:这使其不适合编写脚本,因为您不能轻易地从状态代码中捕获它。根据情况(删除或修改等),冲突标记可能会完全不同,这也使grep变得很难。谨防。
git merge
,git reset --keep HEAD@{1}
如果我不喜欢这个结果。