Git diff但仅适用于另一个分支的更改

时间:2014-06-23 22:23:36

标签: git

假设我在git中有一个branch0。

从这个branch0开始,我创建了一个branch1并开始研究它。过了一会儿,我将更改提交到此branch1。同时branch0正在改变。

如果我将branch1的最新版本与branch0进行比较,我将看到分支之间的所有更改,而不仅仅是与branch1中的更改​​相关的更改。

例如,如果在branch0中修改了文件,但未在branch1上修改该文件,则git diff将显示该文件的更改。但是在branch1上没有修改该文件。所以我希望在差异中忽略它。

从某种意义上说,我想在branch1和branch0之间做一个git diff,但仅限于在branch1中修改过的文件。

git有可能吗?我可以想象在bash中执行它,列出所有文件并逐个进行差异。但是想知道git中是否有更简单的方法。

3 个答案:

答案 0 :(得分:1)

您可以使用比较任意提交

  

与任意提交相比

$ git diff test            <1>
$ git diff HEAD -- ./test  <2>
$ git diff HEAD^ HEAD      <3>
     
      
  1. 不使用当前分支的提示,而是与“test”分支的提示进行比较。

  2.   
  3. 不是与“test”分支的提示进行比较,而是与当前分支的提示进行比较,但将比较限制为文件“test”。

  4.   
  5. 比较上一次提交和最后一次提交之前的版本。

  6.   

来自http://git-scm.com/docs/git-diff示例

实施例

假设你有这个git树

1---2 (branch0)
     \
      3 (branch 1)

在commit 3中你对branch1进行了更改,现在我们应用并提交一些更改到branch0

1---2---4 (branch0)
     \
      3 (branch 1)

如果你现在这样做

$ git checkout branch1
$ git diff branch0

它将显示这些分支之间的所有更改,包括像您已经说明的那样在提交4中应用的更改。 但是你只想查看branch1的变化,它基本上是对它从分支的提交的差异,所以这应该做的工作

$ git checkout branch1
$ git diff 2

其中2只是提交哈希的一个例子,实际上看起来更像是e542ghe或类似的东西

答案 1 :(得分:0)

  branch1和branch0之间的

git diff,但仅限于在branch1中修改的文件。

这是

git diff branch0 branch1 -- $(git diff --name-only branch0...branch1)

上面用于生成文件名的三点形式是

  

git diff [--options] <commit>...<commit> [--] [<path>…]

     

包含和从第二个开始的分支的更改,从两者的共同祖先开始。 “git diff A ... B”相当于“git diff $(git-merge-base A B)B”。你可以省略任何一个,它与使用HEAD具有相同的效果。

答案 2 :(得分:0)

git diff branch0...branch1

会做你想做的(注意三个点)

也就是说,由于共同祖先提交,它只会向您显示branch1上所做的更改。共同的祖先提交是两个分支上的最新提交。

在下面的树中,git diff branch0...branch1将向您显示由于提交A,B,C而引起的更改。公共祖先是E。

     A---B---C branch1
     /
D---E---F---G branch0