【问题标题】:git diff showing only commits that revision/branch A is ahead of revision/branch Bgit diff 仅显示修订/分支 A 在修订/分支 B 之前的提交
【发布时间】:2013-07-10 10:09:29
【问题描述】:

有时我会遇到以下问题:

  1. 在功能分支中添加一些提交。

  2. 从上游更新主节点。

  3. 1234563领先于主人,而不是落后于主人。

有没有办法做到这一点,而不必将 master 合并到功能分支中?

【问题讨论】:

标签: git


【解决方案1】:

我认为正确的答案是三点

git diff master...feature

这仅显示了与 master 相关的功能上的新变化。另见:git diff - show only what's new on the remote

【讨论】:

  • 如果您在功能分支上并且您在 git diff master... 省略功能分支名称时也可以使用 :)
【解决方案2】:

我经常去

git log -p feature-branch --not master

但如果你想要一个差异,你正在寻找

git diff <common-ancestor> master

&lt;common-ancestor&gt; 是您想要比较的功能分支和主分支的共同祖先。您可以使用merge-base 为您查找。

git diff `git merge-base feature-branch master` feature-branch

【讨论】:

  • 这不会在分支点之后显示 Master 上的提交,而不是功能分支上的更改吗?
  • 使用git log master --not &lt;commit-sha-id&gt; 没有-p 我获得了没有差异的提交。
【解决方案3】:

您的问题有点不清楚,因为我不确定您是否想查看 masterfeature 之间更改的差异/补丁,或者您只想查看哪些分支包含哪些提交分支没有。

假设您只想查看feature 分支中的哪些提交在master 中不存在(即feature 中的哪些提交在master 的“前面”),那么您可以这样做

$ git log --oneline --graph master..feature

如果您想查看masterfeature 是如何分歧的,您可以使用以下命令:

$ git log --oneline --graph --first-parent \
--decorate --left-right master...feature
> 5bef654 (feature) A ...
> f7c65ea B ...
> fc66245 C ...
> 7435fc0 D ...
< bf68204 (master) X ...
< 0c10ed1 Y ...
< 27bb774 Z ...

上面的输出显示了master 中不在feature 中的提交,它们前面有&lt;(因为你使用了master...feature,master 在命令的左边&lt; 一侧),而提交在feature 中,不在master 中的标记为&gt;,因为您在master...feature 的右侧使用了feature。此表单中的三个点... 很重要,请不要忽略它们。

您可以了解有关指定 Commit Range from the Pro Git book 的更多信息。

【讨论】:

  • $ git log --oneline --graph master..feature 这很完美
  • 同意 eloone。这是我学到的新东西,但一年以来一直在寻找。 #ftw
【解决方案4】:

如果我正确理解了您的问题,您的功能分支与主分支无关,您希望查看您在功能分支上提交的内容与您从主分支分支时的外观之间的差异。

A----B----C
 \
  D----E----F

在这种情况下,您可以将git diff 命令与提交的相应哈希一起使用。因此,对于在 A 点分支并随后提交 D、E 和 F 的功能分支,您可以这样做:

git diff <hash of commit F> <hash of commit A>

您可以使用git merge-base feature master 查看上面要使用的点 A 的哈希值,并使用 git log 查看您在功能分支上最近提交 F 的哈希值。或者使用以下命令在一行上完成所有操作:

git diff feature `git merge-base feature master`

【讨论】:

  • 请注意,您可以使用git merge-base在一行中完成此操作。
  • 谢谢迪特里希!我已经用这些信息编辑了上面的答案。
【解决方案5】:

不是一个确切的答案,而是一个大多数时间都可以满足我需求的单行。

git difftool -d master..

【讨论】:

    猜你喜欢
    • 2016-04-13
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2016-03-07
    • 2020-05-07
    • 2020-03-01
    • 1970-01-01
    相关资源
    最近更新 更多