我发现自己经常处于一种情况,在这种情况下,我想看到所有变化的差异,即一个分支自分支关闭以来引入的差异。天真的
$ git diff ..branch
不能很好地工作,因为
master
中的更改也被考虑在内。我要找的基本上是更好的跑步方式$ git diff $(git merge-base master branch)..branch
或用图形表示:
---A---B---C---D---E <== master
\
F---G---H <== branch
如何优雅地找到
B
和H
之间的差异?编辑:正如我在下面的回答中指出的,
master...branch
是解决我问题的方法。然而,我仍然不知道,为什么会这样,给出引用的手册页片段。为什么
diff master...branch
只显示与合并基的差异,而man rev-parse
说,它也应该包括master
的提交?为什么
diff master..branch
显示master
和branch
的当前状态之间的差异,而man rev-parse
说,它应该忽略仅master
提交? 最佳答案
在对git help rev-parse
进行了广泛的研究和试验之后,我发现了以下信息:
<rev1>..<rev2>
Include commits that are reachable from <rev2> but exclude those
that are reachable from <rev1>. When either <rev1> or <rev2> is
omitted, it defaults to HEAD.
<rev1>...<rev2>
Include commits that are reachable from either <rev1> or <rev2>
but exclude those that are reachable from both. When either <rev1>
or <rev2> is omitted, it defaults to HEAD.
不知怎的,我总是有这样的印象,我需要的就是
master..branch
,而忘记了master...branch
(有三个点)。但实验表明,三点符号正是我想要的:
$ git diff master...branch
仅显示
branch
相对于master
的起飞位置的差异。