我想在尚未合并到主分支的所有更改的差异。
我试着:
git diff master git diff branch..master git diff branch...master
但是,在每一种情况下,差异在master中包含的内容还没有合并到我的分支中。
是否有一种方法可以在我的分支和master之间做一个区别,排除master中还没有合并到我的分支中的更改?
git diff `git merge-base master branch`..branch
合并基础是branch与master分离的点。
branch
master
Git diff支持一种特殊的语法:
git diff master...branch
你不能交换两边因为那样你会得到另一个分支。你想知道在branch中发生了什么变化,因为它偏离了master,而不是相反。
你可能想要用HEAD替换这个语法中的branch,甚至完全删除它——以下两种方法都显示当前分支的内容,因为它与master分离了:
HEAD
git diff master...HEAD git diff master...
松散相关:
注意,..和...语法与其他Git工具中的语义不同。它与man gitrevisions中指定的含义不同。
..
...
man gitrevisions
引用man git-diff:
man git-diff
< p > git diff [--options] <commit> <commit> [--] [<path>…] 这是为了查看两个任意<commit>之间的变化。 < p > git diff [--options] <commit>..<commit> [--] [<path>…] 这与前面的形式是同义的。如果省略了一侧的<commit>,则其效果与使用HEAD相同。 < p > git diff [--options] <commit>...<commit> [--] [<path>…] 此表单用于查看包含和直到第二个<commit>的分支上的更改,从两个<commit>的共同祖先开始。“git diff A...B"相当于“__abc3”。你可以省略<commit>中的任何一个,这与使用HEAD具有相同的效果。 以防你正在做一些奇异的事情,应该注意的是,上面描述中的所有<commit>,除了最后两种使用".."符号,可以是任意<tree>。 有关<commit>更完整的拼写方法列表,请参见&;gitrevisions[7]中的section。然而,“diff"是关于比较两个端点,而不是范围,范围符号("<commit>..<commit>"和“<commit>...<commit>"”)并不意味着“指定范围”中定义的范围;gitrevisions[7]中的section。
git diff [--options] <commit> <commit> [--] [<path>…]
这是为了查看两个任意<commit>之间的变化。
<commit>
git diff [--options] <commit>..<commit> [--] [<path>…]
这与前面的形式是同义的。如果省略了一侧的<commit>,则其效果与使用HEAD相同。
git diff [--options] <commit>...<commit> [--] [<path>…]
此表单用于查看包含和直到第二个<commit>的分支上的更改,从两个<commit>的共同祖先开始。“git diff A...B"相当于“__abc3”。你可以省略<commit>中的任何一个,这与使用HEAD具有相同的效果。
git diff A...B
以防你正在做一些奇异的事情,应该注意的是,上面描述中的所有<commit>,除了最后两种使用".."符号,可以是任意<tree>。
<tree>
有关<commit>更完整的拼写方法列表,请参见&;gitrevisions[7]中的section。然而,“diff"是关于比较两个端点,而不是范围,范围符号("<commit>..<commit>"和“<commit>...<commit>"”)并不意味着“指定范围”中定义的范围;gitrevisions[7]中的section。
gitrevisions[7]
<commit>..<commit>
<commit>...<commit>
以下是对我有效的方法:
git diff origin/master...
这只显示了我当前选择的本地分支和远程主分支之间的更改,而忽略了来自合并提交的本地分支中的所有更改。
正如John Szakmeister和VasiliNovikov所指出的,从master的角度获得你的分支的全部差异的最短命令是:
git diff master...
这将使用本地的master副本。
要比较特定文件的使用情况:
git diff master... filepath
输出的例子:
.
根据文档
git diff显示工作树和索引之间的变化 树,索引和树之间的变化,两棵树之间的变化, 合并导致的更改、两个blob对象之间的更改或 .磁盘上两个文件之间的变化
git diff显示工作树和索引之间的变化 树,索引和树之间的变化,两棵树之间的变化, 合并导致的更改、两个blob对象之间的更改或
在git diff - 两点__ABC1和三点...在库中比较分支或拉取请求的方式上有显著差异。我给你们举个简单的例子。
git diff
让我们假设我们正在从master中签出新的分支并将一些代码推入。
G---H---I feature (Branch) / A---B---C---D master (Branch)
两个点 -如果我们想要显示两边当前时间内发生的所有变化之间的差异,我们将使用git diff origin/master..feature或git diff origin/master ,输出: (H, I against A, B, C, D)
git diff origin/master..feature
git diff origin/master
H, I
A, B, C, D
三个点 -如果我们想要显示最后一个共同祖先(A)之间的差异,也就是我们开始新分支的检查点,我们使用git diff origin/master...feature,输出: (H, I对__abc3)。
A
git diff origin/master...feature
将分支/commitIDs之间的git差异置为一个补丁文件(只有在没有删除或创建文件的情况下才可以),然后在新的分支中应用它。
git checkout -b new-branch-name git diff abcde123..branch-name > branch-name.patch git apply branch-name.patch rm branch-name.patch git add . git commit -m '#123 commit msg’ git push
其中abcde123是master中的提交ID,其中还没有不必要的更改。
git diff a4488d20406a1f26888d80eb7d57aa3b0054e307 or git diff 553e4c7dcdcf366917d36ad8f28a273c88d92a1b..a4488d20406a1f26888d80eb7d57aa3b0054e307