diff分支相对于共同祖先的git变化

Bol*_*wyn 10 git diff command-line-interface

我发现自己经常处于这样一种情况,我希望看到所有变化的差异,即从分支开始引入的分支.天真

$ git diff ..branch
Run Code Online (Sandbox Code Playgroud)

效果不好,因为master也考虑了变化.我正在寻找的基本上是一种更好的运行方式

$ git diff $(git merge-base master branch)..branch
Run Code Online (Sandbox Code Playgroud)

或以图形表示:

---A---B---C---D---E  <== master
        \
         F---G---H    <== branch
Run Code Online (Sandbox Code Playgroud)

如何优雅之间找到的差异BH

编辑:如下面的答案中所述,master...branch是我的问题的解决方案.但是,我仍然不知道,为什么会这样,给出引用的手册页片段.

为什么diff master...branch只显示与合并基础的差异,同时man rev-parse说,它应该也包括master提交?

为什么要diff master..branch显示当前状态master和之间的差异branch,虽然man rev-parse说,它应该忽略master-only提交?

Bol*_*wyn 9

经过广泛的观察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.
Run Code Online (Sandbox Code Playgroud)

不知怎的,我总是在印象中,这master..branch就是我需要和忘记的master...branch(有三个点).

但试验它表明,三点符号正是我正在寻找的:

$ git diff master...branch
Run Code Online (Sandbox Code Playgroud)

仅显示branch相对于起飞位置的差异master.

  • 这绝对是答案; 因为这是Google的第一个结果(至少在我的搜索泡泡中!),您可能希望将自己的答案标记为"已接受".哦,关于*为什么*这种情况的解释 - 基本上是向后兼容性.`rev-parse`文档实际上并不适用于此; 它直接在`git help diff`中记录.(参见/sf/answers/32411921/) (3认同)