假设我在git中有一个branch0。
从这个branch0开始,我创建了一个branch1并开始研究它。过了一会儿,我将更改提交到此branch1。同时branch0正在改变。
如果我将branch1的最新版本与branch0进行比较,我将看到分支之间的所有更改,而不仅仅是与branch1中的更改相关的更改。
例如,如果在branch0中修改了文件,但未在branch1上修改该文件,则git diff
将显示该文件的更改。但是在branch1上没有修改该文件。所以我希望在差异中忽略它。
从某种意义上说,我想在branch1和branch0之间做一个git diff
,但仅限于在branch1中修改过的文件。
git有可能吗?我可以想象在bash中执行它,列出所有文件并逐个进行差异。但是想知道git中是否有更简单的方法。
答案 0 :(得分:1)
您可以使用比较任意提交
与任意提交相比
$ git diff test <1> $ git diff HEAD -- ./test <2> $ git diff HEAD^ HEAD <3>
不使用当前分支的提示,而是与“test”分支的提示进行比较。
不是与“test”分支的提示进行比较,而是与当前分支的提示进行比较,但将比较限制为文件“test”。
- 醇>
比较上一次提交和最后一次提交之前的版本。
来自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