在git中,可以使用以下命令获取尚未合并到master中的某个分支xxxx的分支提交列表:
$ git rev-list xxxx --not master
<hash1>
<hash2>
<hash3>
例如,如果分支xxxx中有3个提交,您将获得3行中3个哈希的列表:
git rev-list xxxx --not <hash3>^
但是,如果我将此分支合并为master,则无法再使用相同的命令检索此哈希列表;我得到一个空列表,因为提交现在在master中。
我想知道是否有人可以在合并后生成此列表的命令。优选地,无论提交是否已合并到主控,命令都将以相同的方式工作。
以下基本上可以解决问题:
<hash3>
但是,我想在脚本中使用它,并且我不想提供{{1}}作为参数 - 我需要以编程方式找到它。
答案 0 :(得分:0)
在https://stackoverflow.com/a/4991675/515973和https://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
我进行了测试,它适用于合并和未合并的分支,但不适用于快进合并。