这是how to list commits on a branch but not merged branches的倒数,所以我会以相同的格式询问它。假设我的 git 提交历史如下所示:
A---B---C---D---E---F master
\ /
X---Y---Z topic
如何列出 topic
分支上的提交——即 X
、Y
和 Z
?请注意,简单地执行 git log topic
是行不通的——它还会返回提交 A
和 B
。
我以为我可以运行 git merge-base topic master
来找到 B
,然后执行 git log B..Z
来得到这些提交。不幸的是,git merge-base topic master
返回 Z
,而不是 B
,回想起来这是有道理的——因为 Z
已经 merge 到 master,topic
和 master
之间共享历史的第一个提交是 Z
。
最佳答案
如果你只 merge 了topic
至 master
一次,你知道你 merge 了topic
进入master
在 merge 提交中 E
, 你可以简单地使用 <rev>^-<n>
revision syntax :
git log E^-
如果你不记得提交的哈希 E
并想要一种简单的方法来找到它,基于您的分支名称 ( topic
),您可以使用问题 "Find merge commit which include a specific commit" 中的答案之一.我个人喜欢 git when-merged
:
git when-merged topic
综合起来:
git log $(git when-merged -c topic)^-
如果 merge topic
几次master
, 那么上面的语法将只列出在最近的 merge 提交中 merge 的提交。在这种情况下,您可以使用 rocketraman 的 mergedtopiclg
alias
git mergedtopiclg $(git when-merged -c topic)
为了完整起见,此别名配置为
mergedtopiclg = !sh -c \"git lg $(git oldest-ancestor $1^2 ${2:-master})..$1^2\" -
# The oldest ancestor between an integration branch (by default, master) and a topic branch (by default HEAD)
# e.g. git oldest-ancestor master ai/topic
# See http://stackoverflow.com/a/4991675/430128
oldest-ancestor = !bash -c 'diff --old-line-format= --new-line-format= <(git rev-list --first-parent \"${1:-master}\") <(git rev-list --first-parent \"${2:-HEAD}\") | head -1' -
关于Git:如何列出 merge 分支上的提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23520125/