gpt4 book ai didi

git - 在 merge 提交的 commit-msg 钩子(Hook)中获取源分支名称

转载 作者:太空狗 更新时间:2023-10-29 13:40:34 25 4
gpt4 key购买 nike

在 merge 提交的 commit-msg Hook 中,如何获取 merge 的直接源分支的分支名称?我可以用类似的东西获得目标分支

git rev-parse --abbrev-ref HEAD

但是 HEAD 和 HEAD^ 都指向目标分支。有没有办法以编程方式确定来源?我正在为 Hook 使用 bash 脚本。

默认的 merge 提交消息包含以下文本:

Merge branch 'source-branch' into target-branch

因此 commit-msg Hook 可以直接从消息中获取名称,但不能保证用户没有编辑它。如果有更简单的方法,我会更喜欢。

编辑:啊,不幸的是我也没有意识到 commit-msg 实际上甚至不会在 merge 提交上运行!所以无论如何我都必须找到一种不同的方式来做我想做的事。

最佳答案

这将为您提供正在 merge 的提交:

git rev-parse MERGE_HEAD

我认为除了使用如下命令猜测之外,没有其他方法可以找到分支名称:

git for-each-ref | grep ^$(git rev-parse MERGE_HEAD)

(找到所有指向您正在 merge 的提交的分支)

请注意,被 merge 的提交不一定必须是一个分支,也可以像git merge deadbeef那样直接 merge 一个提交。

在 Octopus merge 的情况下,有多个提交同时被 merge ,并且 MERGE_HEAD 不存在。

如果你要从 merge 消息中提取它,那么使用 .git/MERGE_MSG.git/COMMIT_EDITMSG 更安全,因为它不太可能被手工处理-编辑。

消息是由 git merge 生成的,因此可以从 git merge 的参数中访问分支名称,但这似乎没有存储在磁盘上。

关于git - 在 merge 提交的 commit-msg 钩子(Hook)中获取源分支名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29936978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com