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

问题描述 投票:11回答:4

我经常发现自己想看到所有变化的差异,即分支机构自分支机构开始引入的情况。天真

$ 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 -only提交?

git command-line-interface diff
4个回答
12
投票

[广泛查看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的位置的差异。


1
投票

我知道这不是您要在这里找到的答案,但这可能会对其他人有所帮助。使用gitk等图形工具,您可以:

  • 打开gitk
  • 单击H,右键单击并选择“标记此提交”
  • 单击B,右键单击并选择“比较此->标记为提交”]

现在,您将在右侧看到所有更新的文件,并在左侧看到所有修改的行(每个文件)。


1
投票

我正在寻找的基本上是一种更好的运行方式

$ git diff $(git merge-base master branch)..branch

如何创建别名?

git config alias.diffbr '!f() { git diff $(git merge-base master $1)..$1; }; f'

然后您可以简单地执行git diffbr branch

如果您希望别名可用于计算机上的所有存储库,请添加--global argument to git config


0
投票

如果要根据分支位置检查当前分支,只需添加--global。所以命令看起来像

git config

...相同。我正在运行git版本2.17.1。在较旧的版本中,此行为可能会有所不同。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.