当前分支和主控之间的Git diff,但不包括未提交的主提交
我想要一个不合并到master的分支的所有变化的差异。
我试过了:
git diff master git diff branch..master git diff branch...master
但是,在每种情况下,diff都包含尚未合并到我的分支中的主内容。
有没有一种方法可以在我的分支和主人之间进行差异化,排除主人尚未合并到我的分支的变化?
git diff `git merge-base master branch`..branch
合并基础是branch
从master
分离的点。
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]
的“指定范围”部分。