仅显示不在合并分支上的合并提交和提交

时间:2016-09-14 14:23:20

标签: git

我们已经习惯于根据git log --merges生成更改日志。这很好,因为合并提交消息包含问题编号和简短描述。

现在我们已经开始压缩较小的提交而没有任何合并提交。这打破了我们的更改日志工作流程。

有什么方法可以让我的master分支上的所有合并提交的所有合并提交都不在任何其他功能分支中?

2 个答案:

答案 0 :(得分:1)

我认为" git log --first-parent"是你在寻找的。

答案 1 :(得分:0)

如果您的工作流程确保相关分支中每个提交的第一个父级是该分支的先前版本,您可能需要尝试git log --first-parent

什么是"第一个父母"?

每个提交都有一个(用于"单个提交"如您所说)或更多(合并提交)父项。在合并的情况下,这些父项有一个顺序,其中第一个父项是合并的目标(在master中执行git merge feature-a将master的旧HEAD作为第一个父项,而feature-a的HEAD成为第二个新提交的父级)。选项--first-parent仅跟随所有提交的第一个父项。所以这应该给你所有合并到当前分支和所有提交到它。

这怎么会失败?

这种情况不起作用的常见情况是,有人做git pull创建提交以将远程更改合并到其本地分支(即不是快进)。在这种情况下,第一个父项将是先前的本地版本,从git log --first-parent删除所有合并到您的主分支,这些合并之前不属于本地主服务器。这将创建一个这样的历史记录:

* Merge branch 'master' of your-remote into master
|\
| * Previous version of remote master
| |
* | Local change
| |
|/
* Last common commit

顶级合并的第一个父级是"本地更改"并且git log --first-parent只显示顶部合并,"本地更改"和"最后的共同提交"。

什么时候会起作用?

如果有一个用于合并所有必需更改的中央存储库,

git log --first-parent将适合您的情况。这可能是一个维护者从其他存储库中提取更改并确保这不会导致快进(例如,通过使用" git pull / merge --no-ff")。或者你正在使用像Atlassians Stash或Github这样的拉取请求工具,只能通过拉取请求合并到掌握。

您可以通过git的维护者Junio C Hamano详细了解this blog post--first-parent的使用情况。