这是如何列出分支上的提交但不列出合并的分支 https://stackoverflow.com/questions/10248137/git-how-to-list-commits-on-this-branch-but-not-from-merged-branches,所以我会以相同的格式询问。假设我的 git 提交历史记录如下所示:
A---B---C---D---E---F master
\ /
X---Y---Z topic
如何列出提交topic
分支——也就是说,X
, Y
, and Z
?请注意,只需做git log topic
不起作用——这将返回提交A
and B
以及。
我本来以为我可以跑git merge-base topic master
找到B
,然后做git log B..Z
获得这些提交。很遗憾,git merge-base topic master
回报Z
, not B
,回想起来这是有道理的——因为Z
已经合并到master,之间的第一次提交topic
and master
分享历史的是Z
.
如果你只合并topic
to master
once,并且您知道您合并了topic
into master
在合并提交中E
,您可以简单地使用<rev>^-<n>修订语法 https://git-scm.com/docs/gitrevisions#Documentation/gitrevisions.txt-emltrevgt-ltngtemegemHEAD-HEAD-2em:
git log E^-
如果你不记得提交的哈希值E
并希望有一种简单的方法可以根据您的分支名称找到它(topic
),您可以使用问题中的答案之一“查找包含特定提交的合并提交” https://stackoverflow.com/questions/8475448/find-merge-commit-which-include-a-specific-commit。我个人喜欢git when-merged https://github.com/mhagger/git-when-merged:
git when-merged topic
把它们放在一起:
git log $(git when-merged -c topic)^-
如果你合并了topic
几次到master
,那么上面的语法将仅列出在最近的合并提交中合并的提交。在这种情况下,您可以使用 Rocketraman 的mergedtopiclg alias https://gist.github.com/rocketraman/1fdc93feb30aa00f6f3a9d7d732102a9#file-gitconfig-L73-L75
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' -
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)