【问题标题】:How to get a list of branch commits before and after merging to trunk如何在合并到主干之前和之后获取分支提交列表
【发布时间】:2015-09-24 13:06:24
【问题描述】:

在 git 中,可以使用以下命令获取某个分支 xxxx 尚未合并到 master 中的分支提交列表:

git rev-list xxxx --not master

例如,如果在分支 xxxx 中有 3 次提交,您将在 3 行上得到一个包含 3 个哈希的列表:

$ git rev-list xxxx --not master
<hash1>
<hash2>
<hash3>

但是,如果我将此分支合并到 master 中,我将无法再使用相同的命令检索此哈希列表;我得到一个空列表,因为提交现在在 master 中。

我想知道是否有人有可以在合并后生成此列表的命令。最好,无论提交是否已合并到主控,该命令都将以相同的方式工作。

以下内容基本上可以解决问题:

git rev-list xxxx --not <hash3>^

但是,我想在脚本中使用它,并且我不想提供 &lt;hash3&gt; 作为参数 - 我需要以编程方式找到它。

【问题讨论】:

  • 你想用脚本实现什么?可能有更简单的方法。
  • 我对这种可能性持开放态度。该脚本的目的是为 Trac (trac.edgewall.org) 生成统一的差异视图链接。无论该分支是否已合并,脚本都需要在给定特定远程分支的情况下生成相同的输出链接。
  • 合并后直接git rev-list master^..xxxx 应该是您要查找的内容。如果master 不再直接指向合并提交,它就会变得更加困难。
  • 是的。所说的困难是我在这里试图克服的。无论调用脚本时 master 在哪里,我都想要相同的哈希列表。

标签: git


【解决方案1】:

https://stackoverflow.com/a/4991675/515973https://stackoverflow.com/a/30563070/515973 中找到了“最古老的祖先”问题的解决方案。

git rev-list $(diff -u1 <(git rev-list --first-parent xxxx) <(git rev-list --first-parent master)|sed -ne 's/^ //p')..xxxx

或者,如果您创建有用的“最古老的祖先”别名,

oldest-ancestor = !bash -c 'diff -u1 <(git rev-list --first-parent "${1:-master}") <(git rev-list --first-parent "${2:-HEAD}") | sed -ne \"s/^ //p\"' -

那么解决方法是:

git rev-list $(git oldest-ancestor master xxxx)..xxxx

我测试过,它适用于合并和未合并的分支,但不适用于快进合并。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-08
    • 2017-07-07
    • 2021-08-12
    • 1970-01-01
    • 2017-12-20
    • 2014-01-15
    • 2010-09-14
    • 1970-01-01
    相关资源
    最近更新 更多