Git:如何列出 merge 分支上的提交?

标签 git merge branch history

这是how to list commits on a branch but not merged branches的倒数,所以我会以相同的格式询问它。假设我的 git 提交历史如下所示:

A---B---C---D---E---F master
     \         /
      X---Y---Z topic

如何列出 topic 分支上的提交——即 XYZ?请注意,简单地执行 git log topic 是行不通的——它还会返回提交 AB

我以为我可以运行 git merge-base topic master 来找到 B,然后执行 git log B..Z 来得到这些提交。不幸的是,git merge-base topic master 返回 Z,而不是 B,回想起来这是有道理的——因为 Z 已经 merge 到 master,topicmaster 之间共享历史的第一个提交是 Z

最佳答案

如果你只 merge 了topicmaster 一次,你知道你 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/

相关文章:

Git merge 方向错误

Git merge 冲突自定义自动解决

git - "git config --list"显示重复名称

git 错误 : out of memory, malloc 失败(尝试分配 X 字节)

git - 使用 GitHub Desktop 一次放弃所有更改

git - TortoiseGit 本地分支与 GitHub 上的远程分支

git - 术语 "HEAD"、 "head"和 "tip"有何不同?

Git - 如何更改凭据 [远程 : HTTP Basic: Access denied fatal: Authentication failed for]

php - 连接数组以进入多维数组

git - 将 master 分支中的当前工作切换到新分支(在 git 中)