作为Jenkins Pipeline构建系统的一部分,我需要找出任何分支的最近祖先的特定提交SHA,无论是主分支还是任何其他分支。在视觉上,箭头指向所需的提交与被分析的提交相比:
与(1)中一样,祖先是主(黑线),但它不是前面的提交,它已经是分支的一部分。在(6)中,期望的提交是标记为“Dev”的分支的一部分。
在我的场景中,这只会在由git推送触发时执行,所以我们至少可以假设当前分支尚未合并到任何其他分支(希望如此)。
我没有Git的经验,所以我试图拼凑一些东西,但到目前为止没有任何工作按预期进行。有人对此提出建议吗?
想法失败
执行git rev-list HEAD ^list-all-branches-but-the-current-one
,获取最早的提交,然后获取它的直接祖先,但这会失败,因为我的当前分支可能是分支的,所以属于两者的提交都将被删除,并且我会最终得到我的分支分支的SHA,而不是从哪里分支;
This other SO answer提供了一个很好的命令来查找分支的祖先与另一个分支:diff --old-line-format= --new-line-format= <(git rev-list --first-parent master) <(git rev-list --first-parent HEAD) | head -1
,但问题是我仍然不知道要比较哪个分支,因为它不会永远是主人。
更新1
我一直在玩替代品,我在this SO answer的评论中达到了这个版本的修改版本:
git rev-parse "$(git show-branch | sed "s/].*//" | grep "\*" | tail -n 1 | sed 's/.*\[\(.*\)/\1/')"~1
它使用分支的可视化显示,执行以下步骤:
]
之后的所有内容,这是围绕提交引用; *
的行,用于标记当前分支; [
以外的所有内容,只留下提交引用; 我可以确认的缺点:
根据我的测试,它似乎有用,可能对我的情况来说已经足够了。有评价吗?