当前分支和主控之间的Git diff,但不包括未提交的主提交

我想要一个不合并到master的分支的所有变化的差异。

我试过了:

git diff master git diff branch..master git diff branch...master 

但是,在每种情况下,diff都包含尚未合并到我的分支中的主内容。

有没有一种方法可以在我的分支和主人之间进行差异化,排除主人尚未合并到我的分支的变化?

 git diff `git merge-base master branch`..branch 

合并基础是branchmaster分离的点。

Git diff支持这个特殊的语法:

 git diff master...branch 

你不能交换双方,因为那样你会得到另一个分支。 你想知道branch什么变化,因为它与master分歧,而不是相反。

松散相关:

  • 用Gitfind一个分支点?
  • 我怎样才能看到另一个分支是从哪个分支分出的?

请注意, .....语法不像其他Git工具那样具有相同的语义。 它不同于man gitrevisions指定的含义。

引用man git-diff

  • git diff [--options] <commit> <commit> [--] [<path>…]

    这是查看两个任意<commit>之间的变化。

  • git diff [--options] <commit>..<commit> [--] [<path>…]

    这是以前的forms的代名词。 如果一方的<commit>被忽略,它将和使用HEAD具有相同的效果。

  • git diff [--options] <commit>...<commit> [--] [<path>…]

    这种forms是查看包含第二个<commit>的分支上的变化,从两个<commit>的共同祖先开始。 “ git diff A...B ”相当于“ git diff $(git-merge-base AB) B ”。 您可以省略<commit>任何一个,它与使用HEAD具有相同的效果。

以防万一,如果你正在做一些奇特的事情,应该注意的是,除了最后两个使用“..”符号的表单,以上描述中的所有<commit>可以是任何<tree>

有关拼写<commit>的更完整列表,请参阅gitrevisions[7] “指定修订”部分。 然而,“差异”是关于比较两个端点,而不是范围,范围符号(“ <commit>..<commit> ”和“ <commit>...<commit> ”)并不意味着定义的范围gitrevisions[7]的“指定范围”部分。