2015-04-22 100 views
15

我已经看过使用git diff和git修订(HEAD,ORIG_HEAD,FETCH_HEAD等)的各种SO答案,我还没有找到一个简单的方法来列出自本地分支开始以来所做的更改,或自上次发生变化以来。有没有一种快速的方法来从点或分支来源“git diff”?

通过容易我的意思是不必查找和粘贴提交SHA或必须计算我想回顾多少提交。

git diff origin/master已经接近,但是它指的是远程,因为我检出了新的分支,所以可能会发生分歧。

我希望有类似git diff BASE_HEAD的东西可用。

......除非已经有办法做到这一点。有没有人有答案?

+1

您想要根据上游的mergebase进行比较,请使用@ {u}和三点语法。尝试'git diff @ {u} ... HEAD' –

+0

http://stackoverflow.com/questions/1527234/finding-a-branch-point-with-git,lindes答案。你也可能对其他答案感兴趣。 –

回答

13

使用git diff @{u}...HEAD,有三个点。

使用两个点或省略HEAD时,它将显示两侧变化的差异。

有三个点,它只会显示你身边变化的差异。

编辑:对于需求略有不同的人,您可能会对git merge-base感兴趣(请注意,它有比其他答案用途更多的选项)。

+1

@ {u}是上游。然而,我并不总是有上游定义... – user776686

+0

@nuton好,它可以与任何两个提交... – o11c

+0

@ o11c在哪里指定分支名称与您的解决方案? – jangorecki

14

您可以使用git merge-base找到分支点。 。考虑master主线和dev其历史你感兴趣的分支找到它devmaster分支点,运行:

git merge-base --fork-point master dev 

我们现在可以diff的dev针对此基础上:

git diff $(git merge-base --fork-point master dev)..dev 

如果dev当前分支简化为:

git diff $(git merge-base --fork-point master) 

欲了解更多信息,请参阅git-merge-base documentation

4

可以使用diff的从分支起点当前分支:

git diff (start point)... 

凡(起点)的一个分支的名字,提交-ID或标签。

例如,如果你从develop分支一个特性分支工作,你可以使用:

git diff develop... 

以来的分支点上当前分支的所有更改。

这已在评论中提及,但我认为它值得回答状态。我不知道自上次发布以来该做什么。

0

对于差异,你需要三点符号。如果你的分支称为dev,它从master支:

% git diff master...dev 

日志,你想要的双点符号:

% git log master..dev 

修订语法r1..r2(有两个点)的意思是“一切可达从r2(含)起,但从r1(含)以内无法到达“。使用这种方法的常规方法是将r1r2指定为提交序列中的一个范围(包括r1独占,r2),所以如果您有10个修订,3..7会显示更改4,5,6和7 。这是{1, 2, 3, 4, 5, 6, 7}减去{1, 2, 3}。但r1并不一定是r2的祖先。把它看作更像一个集合操作,其中r1代表从r1向后的整个祖先,并且r2代表从r2向后的整个祖先,并且您从第二组减去第一组。

那么接下来:

git log master..dev 

是分支减去主的整个历史的整个历史。换句话说,就是分支。

相关问题