当前分支和主服务器之间的Git差异,但不包括未合并的主提交

pil*_*ght 147 git version-control diff merge git-diff

我想要一个尚未合并到master的分支中的所有更改的差异.

我试过了:

git diff master
git diff branch..master
git diff branch...master
Run Code Online (Sandbox Code Playgroud)

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

有没有办法在我的分支和主人之间做一个差异,排除了尚未合并到我的分支的主人的变化呢?

Pal*_*lec 200

git diff `git merge-base master branch`..branch
Run Code Online (Sandbox Code Playgroud)

合并基数branch分歧的地方master.

Git diff支持以下特殊语法:

git diff master...branch
Run Code Online (Sandbox Code Playgroud)

你不能交换双方,因为那样你就会得到另一个分支.你想知道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>,除了最后两个使用".."符号的表格之外,上面描述中的所有内容都可以是任意的<tree>.

有关拼写方法的更完整列表<commit>,请参阅中的"指定修订"部分gitrevisions[7].但是,"diff"是关于比较两个端点,而不是范围,而范围符号(" <commit>..<commit>"和" <commit>...<commit>")并不表示在"指定范围"部分中定义的范围gitrevisions[7].

  • 请注意,您可以使用`git diff master ...`来避免指定分支(将采用当前分支). (12认同)
  • 你是对的,我的回答依赖于被称为"branch"的分支.我选择坚持OP在问题中选择的名称.如果要使用当前分支,请将`branch`替换为`HEAD`. (3认同)

Jes*_*run 32

这对我有用:

git diff origin/master...
Run Code Online (Sandbox Code Playgroud)

这仅显示当前选定的本地分支与远程主分支之间的更改,并忽略来自合并提交的本地分支中的所有更改.


And*_*ber 9

正如John Szakmeister和VasiliNovikov所指出的那样,从师父的角度来看,获得最完全差异的最短命令是:

git diff master...
Run Code Online (Sandbox Code Playgroud)

这将使用您的母版本地副本。

要比较特定文件,请使用:

git diff master... filepath
Run Code Online (Sandbox Code Playgroud)

输出示例:

用法示例


avi*_*amg 6

根据文档

git diff显示工作树和索引或树之间的更改、索引和树之间的更改、两棵树之间的更改、合并产生的更改、两个 blob 对象之间的更改或磁盘上两个文件之间的更改。

In git diff-在我们比较存储库中的分支或拉取请求的方式上,两个点和三个点之间存在显着差异.....。我将给你一个简单的例子来轻松地演示它。

示例:假设我们正在从 master 中检查新分支并推送一些代码。

  G---H---I feature (Branch)
 /
A---B---C---D master (Branch)
Run Code Online (Sandbox Code Playgroud)
  • 两个点- 如果我们想显示双方当前时间发生的所有更改之间的差异,我们将使用git diff origin/master..feature或 只是git diff origin/master
    ,输出: ( H, Iagainst A, B, C, D)

  • 三个点- 如果我们想显示最后一个共同祖先 ( A) 之间的差异,也就是我们开始新分支的检查点,我们使用git diff origin/master...feature,输出:(反对H, I) A

  • 在大多数情况下我宁愿使用 3 个点。