git diff仅显示提交修订/分支A在修订/分支B之前

时间:2013-07-11 23:27:09

标签: git

有时我会遇到以下问题:

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

  2. 从上游更新master。

  3. 想要查看功能分支和主服务器之间的差异,但git diff master显示已在master中添加/删除的所有内容,当我真的只想查看该功能的提交时分支领先于大师,而不是它落后的分支。

  4. 有没有办法在不必将master合并到功能分支的情况下执行此操作?

5 个答案:

答案 0 :(得分:44)

我认为正确答案是三点

git diff master...feature

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

答案 1 :(得分:25)

我通常会去

git log -p feature-branch --not master

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

git diff <common-ancestor> master

其中<common-ancestor>是要与之比较的要素分支和母版的共同祖先。您可以使用merge-base为您找到。

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

答案 2 :(得分:19)

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

假设您只是想查看feature分支中master中不存在的提交(即feature中哪些提交位于{{1}之前“然后你可以做

master

如果您想了解$ git log --oneline --graph master..feature master的分歧,可以使用以下命令:

feature

上面的输出显示$ 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的提交(因为您在左侧<使用了主master...feature命令的一侧),而<中不在主文件中的提交标有feature,因为您在>的右侧使用了feature。这种形式的三重点master...feature很重要,不要遗漏。

您可以详细了解如何指定Commit Range from the Pro Git book

答案 3 :(得分:0)

如果我正确理解了您的问题,那么您的功能分支不在主分支之外,并且您希望看到您在功能分支上提交的内容与主分支在分支时的内容之间的差异。< / p>

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`

答案 4 :(得分:0)

不是一个确切的答案,但是大部分时间都可以满足我的需求。

git difftool -d master..