【问题标题】:How to see commits that were merged in to a merge commit?如何查看合并到合并提交中的提交?
【发布时间】:2011-09-05 16:13:32
【问题描述】:

如果 my-feature-branch 被合并到 my-main-branch 中,我如何查看从 my-feature-branch 合并的提交?

【问题讨论】:

    标签: git branch git-merge git-commit git-log


    【解决方案1】:

    git log abc123^..abc123
    显示合并到 merge-commit abc123 的提交。

    创建一个git 别名log-merge 以便于重用:

    $ git config --global alias.log-merge \
    '!f() { git log --stat "$1^..$1"; }; f'
    $ git log-merge abc123
    

    对于单行版本:

    $ git config --global alias.log-merge-short \
    '!f() { git log --pretty=oneline "$1^..$1"; }; f' 
    

    【讨论】:

    • 这个解决方案很棒。我修改了命令的一个版本,所以我们可以得到一个“短”版本:$ git config --global alias.merge-log-short '!f() { git log --pretty=oneline "$1^..$1"; }; f'
    【解决方案2】:

    如果您想查看上次合并中合并的每个提交,您可以尝试:

    git log $(git merge-base --octopus \
    $(git log -1 --merges --pretty=format:%P)).. --boundary
    

    这是我当前日志的示例:

    $ git log --graph --pretty=oneline --abbrev-commit
    * 44899b9 pouf
    *   8f49f9c Merge branch 'test'
    |\  
    | * 3db39ca test
    * | 69f431c pif
    * | df1f51c lala
    |/  
    * 8fae178 pif2
    * 20f8ba6 init
    

    如果我只想要与最后一次合并相关的提交,我必须使用git log -1 --merges --pretty=format:%P,它为我提供了第一个可用合并的父母:

    $ git log -1 --merges --pretty=format:%P
    69f431cec7859b61d33c7503c9431ceea2aaf3e0 3db39ca3ab1e8f70462db23d94590628b5e7ad7b
    

    现在我知道我需要跟踪哪些父母,我需要他们的共同基础,我可以通过git merge-base --octopus 获得(--octopus 以防万一):

    $ git merge-base --octopus \
    $(git log -1 --merges \
    --pretty=format:%P)
    8fae178666e34a480b22e40f858efd9e7c66c3ca
    

    现在有了git log,我可以搜索从基础到当前HEAD的每一个提交:

    $ git log $(git merge-base --octopus \
    $(git log -1 --merges --pretty=format:%P)).. \
    --boundary --graph --pretty=oneline --abbrev-commit 
    * 44899b9 pouf
    *   8f49f9c Merge branch 'test'
    |\  
    | * 3db39ca test
    * | 69f431c pif
    * | df1f51c lala
    |/  
    o 8fae178 pif2
    

    如果你有点完美主义,你也可以这样做:

    $ git log 
    $(git merge-base --octopus \
    $(git log -1 \
    --merges --pretty=format:%P))..$(git log -1 --merges --pretty=format:%H) \
    --boundary --graph --pretty=oneline --abbrev-commit 
    *   8f49f9c Merge branch 'test'
    |\  
    | * 3db39ca test
    * | 69f431c pif
    * | df1f51c lala
    |/  
    o 8fae178 pif2
    

    现在我想我会保留它作为别名:)

    --graph --pretty=oneline --abbrev-commit 选项是可选的。


    资源:

    【讨论】:

      【解决方案3】:

      如果你有一个合并提交(比如a2345)并说git log -1 a2345,它会告诉你父母的名字(即在这个提交中合并的提交)。这就是你要找的吗?

      【讨论】:

      • 是的,这就是我想要的(虽然只显示了 1 个提交)。我假设您也可以为普通的 git 日志视图执行此操作?
      • 是的。如果您想浏览大量提交的父项,则 GUI (gitk) 更有用。对单个提交的限制是因为-1。删除它,您将获得常规日志。
      • 如果我删除 -1 它会显示所有提交消息的所有日志,这似乎没有用
      猜你喜欢
      • 2016-04-19
      • 2011-09-04
      • 1970-01-01
      • 2014-02-07
      • 2013-10-11
      • 2016-06-27
      • 2019-04-28
      • 2015-07-20
      相关资源
      最近更新 更多