2011-12-15 175 views
64

使用git时,有没有办法显示对分支进行的提交,而忽略通过合并引入的所有提交?显示直接提交到分支的提交,忽略Git中的合并

我试图检查在分支上做出的代码更改,而忽略了我们在其他合并分支上所做的代码更改。我知道这是该死的近乎不可能以这种方式显示差异,但我想能够找出我需要审查哪些提交。

回答

90

父母在git中的许多环境中都具有相同的权重。如果您在合并其他更改时始终保持一致,那么您可能会发现这会给你想要的东西。

git log --no-merges --first-parent 

否则,您可能能够排除其他指定分支的提交。

git log --no-merges ^other-branch-1 ^other-branch-2 ^other-branch-3 

如果你想查看您要合并到一个主要分支,然后以最简单的办法就是在本地克隆进行合并,然后就看DIFF与第一变化父母在发布合并之前。

+0

这第一个命令是优“正确的分支功能”(https://plus.google.com/109096274754593704906/posts/R4qkeyRadLR) – 2011-12-15 22:02:54

3

一个非常hackish的方式:

git log --graph --oneline --no-merges thebranch|grep '^\*'

5

您可以使用git cherry的是,它会找到你承诺的是尚未合并到上游,或者说是在一个分支的提交而不是其他。因此,考虑两个分支命名为“你的分支”和“大师”:

git cherry -v your-branch master 

将为您呈现的提交他们的补丁ID进行比较的列表:

+ c3e441bf4759d4aa698b4a413f1f03368206e82f Updated Readme 
- 2a9b2f5ab1fdb9ee0a630e62ca7aebbebd77f9a7 Fixed formatting 
+ e037c1d90b812af27dce6ed11d2db9454a6a74c2 Corrected spelling mistake 

您可以注意到,承诺由前缀“ - “是出现在两个分支中的那些,而以”+“为前缀的那些只在你的分支上可用。

作为替代,您可以使用:

git log --pretty=format:"%h %s" your-branch..master --no-merges 

它会告诉你关于“你的分支”是尚不存在的“主人”的提交完成的列表