我发现自己经常处于一种情况,在这种情况下,我想看到所有变化的差异,即一个分支自分支关闭以来引入的差异。天真的

$ git diff ..branch

不能很好地工作,因为master中的更改也被考虑在内。我要找的基本上是更好的跑步方式
$ git diff $(git merge-base master branch)..branch

或用图形表示:
---A---B---C---D---E  <== master
        \
         F---G---H    <== branch

如何优雅地找到BH之间的差异?
编辑:正如我在下面的回答中指出的,master...branch是解决我问题的方法。然而,我仍然不知道,为什么会这样,给出引用的手册页片段。
为什么diff master...branch只显示与合并基的差异,而man rev-parse说,它也应该包括master的提交?
为什么diff master..branch显示masterbranch的当前状态之间的差异,而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的起飞位置的差异。

08-26 22:40
查看更多