我希望在尚未合并为master的分支中进行所有更改的差异。
我试过了:
git diff master
git diff branch..master
git diff branch...master
但是,在每种情况下,diff都包含master中尚未合并到我的分支中的内容。
有没有办法在我的分支和主服务器之间进行差异,排除主服务器中尚未合并到我的分支中的更改?
答案 0 :(得分:167)
git diff `git merge-base master branch`..branch
{p> Merge base是branch
与master
分歧的地方。
Git diff支持以下特殊语法:
git diff master...branch
你不能交换双方因为那样你会得到另一个分支。您想知道branch
中的变化,因为它与master
不同,而不是相反。
松散相关:
请注意,..
和...
语法与其他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>
,除了最后两个使用“..”符号的形式外,可以是任何{{ 1}}。有关拼写
<tree>
的方法的更完整列表,请参阅gitrevisions[7]
中的“指定修订”部分。但是,“diff”是关于比较两个端点,而不是范围,范围符号(“<commit>
”和“<commit>..<commit>
”)并不表示“指定范围”部分中定义的范围。gitrevisions[7]
答案 1 :(得分:17)
这对我有用:
git diff origin/master...
这仅显示当前所选本地分支与远程主分支之间的更改,并忽略来自合并提交的本地分支中的所有更改。
答案 2 :(得分:10)
正如John Szakmeister和VasiliNovikov所指出的那样,从师父的角度对您的分支机构进行全面比较的最短命令是:
git diff master...
这将使用您的母版本地副本。
要比较特定文件,请使用:
git diff master... filepath
输出示例:
答案 3 :(得分:0)
git diff 显示工作树与索引或索引之间的更改 树,在索引和树之间进行更改,在两棵树之间进行更改, 合并导致的更改,两个Blob对象之间的更改,或 在磁盘上的两个文件之间切换。
在git diff
-两个点..
和三个点...
之间,在我们比较存储库中的分支或提取请求的方式上存在显着差异。我给你一个简单的例子,轻松地演示它。
示例:假设我们要从master检出新分支并向其中推送一些代码。
G---H---I feature (Branch)
/
A---B---C---D master (Branch)
两个点-如果我们想显示当前双方所有更改之间的差异,我们可以使用git diff origin/master..feature
或仅使用{{1} }
,输出:({git diff origin/master
反对H, I
)
三个点-如果要显示最后一个共同祖先( A, B, C, D
)之间的差异,也就是我们开始新分支的检查点,我们使用{{ 1}},输出:({A
对git diff origin/master...feature
)。
在大多数情况下,我宁愿使用3个点。