我想要一个尚未合并到master的分支中的所有更改的差异.
我试过了:
git diff master git diff branch..master git diff branch...master
但是,在每种情况下,diff都包含master中尚未合并到我的分支中的内容.
有没有办法在我的分支和主人之间做一个差异,排除了尚未合并到我的分支的主人的变化呢?
git diff `git merge-base master branch`..branch
合并基数是branch
分歧的地方master
.
Git diff支持以下特殊语法:
git diff master...branch
你不能交换双方,因为那样你就会得到另一个分支.你想知道branch
它发生了哪些变化master
,而不是相反.
松散相关:
用Git找到分支点?
我怎样才能看到另一个分支从哪个分支分叉?
请注意,..
和...
语法不具有相同的语义在其他的Git工具.它与指定的含义不同man gitrevisions
.
引用man git-diff
:
git diff [--options] <commit> <commit> [--] [<path>…]
这是为了查看两个任意之间的变化
<commit>
.
git diff [--options] <commit>..<commit> [--] [<path>…]
这与之前的表格同义.如果
<commit>
省略一侧,则其效果与使用相同HEAD
.
git diff [--options] <commit>...<commit> [--] [<path>…]
此表单用于查看包含和最多为第二个的分支上的更改
<commit>
,从两者的共同祖先开始<commit>
."git diff A...B
"相当于"git diff $(git-merge-base A B) B
".您可以省略任何一个<commit>
,其效果与使用相同HEAD
.
如果你正在做一些奇特的事情,应该注意的是
<commit>
,除了最后两个使用".."符号的表格之外,上面描述中的所有内容都可以是任意的<tree>
.有关拼写方法的更完整列表
<commit>
,请参阅中的"指定修订"部分gitrevisions[7]
.但是,"diff"是关于比较两个端点,而不是范围,而范围符号("<commit>..<commit>
"和"<commit>...<commit>
")并不表示在"指定范围"部分中定义的范围gitrevisions[7]
.
正如John Szakmeister和VasiliNovikov所指出的那样,从师父的角度来看,获得最完全差异的最短命令是:
git diff master...
这将使用您的母版本地副本。
要比较特定文件,请使用:
git diff master... filepath
输出示例:
这对我有用:
git diff origin/master...
这仅显示当前选定的本地分支与远程主分支之间的更改,并忽略来自合并提交的本地分支中的所有更改.