显示直接提交到分支的提交,忽略 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 中的合并的主要内容,如果未能解决你的问题,请参考以下文章

sourcetree .git 强制忽略指定文件不提交

git 代码分支合并merge提交新修改远程以及本地分支

确定哪个合并提交导致特定提交合并到我的分支中

git合并分支时禁止合并特定文件

git从主分支上拉取新分支以及提交代码合并到主分支

Git:将提交合并到不同的分支