显示直接提交到分支的提交,忽略 Git 中的合并
Posted
技术标签:
【中文标题】显示直接提交到分支的提交,忽略 Git 中的合并【英文标题】:Showing commits made directly to a branch, ignoring merges in Git 【发布时间】:2012-01-21 13:33:37 【问题描述】:使用 git 时,有没有办法显示对分支的提交,同时忽略通过合并带来的所有提交?
我正在尝试查看在某个分支上所做的代码更改,而忽略了我们在合并的其他分支上所做的更改。我知道以这种方式显示差异几乎是不可能的,但我想能够找出我需要审查哪些提交。
【问题讨论】:
【参考方案1】:--no-merges
在 git 的许多情况下,父母双方的权重相同。如果您一直始终如一地合并其他更改,那么您可能会发现这可以满足您的需求。
git log --no-merges --first-parent
否则,您可能能够从其他命名分支中排除提交。
git log --no-merges ^other-branch-1 ^other-branch-2 ^other-branch-3
如果您想查看要合并回主分支的更改,那么最简单的做法是在本地克隆上执行合并,然后在发布之前查看与第一个父级的差异合并。
【讨论】:
第一个命令在“proper branch-per-feature”方面非常出色(plus.google.com/109096274754593704906/posts/R4qkeyRadLR) 似乎我主要从那个分支获得提交,但它仍然显示从主分支中提取的提交。我们有这么多分支,排除其他分支是不切实际的。 @ChannelCat 为什么不将你的分支重新定位到另一个分支上,那么所有的提交都会在最后?【参考方案2】:您可以为此使用git cherry
,它会找到尚未合并到上游的提交,或者在一个分支上但不在另一个分支上的提交。所以给定两个名为“your-branch”和“master”的分支:
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
这将显示在“您的分支”上完成但尚未出现在“主”上的提交列表
【讨论】:
当我尝试编辑您的答案被拒绝时,我将在此处发布:在您的最后一个 git 行中,分支名称之间应该有三个点,而不是两个点。像这样:你的分支...master @vedranm 你不需要 3 个点,只需要两个……虽然 3 的工作方式与 2 的工作方式相同。【参考方案3】:一种非常hackish的方式:
git log --graph --oneline --no-merges thebranch|grep '^\*'
【讨论】:
以上是关于显示直接提交到分支的提交,忽略 Git 中的合并的主要内容,如果未能解决你的问题,请参考以下文章