在合并提交的commit-msg挂钩中,如何获取合并的直接源分支的分支名称?我可以通过类似
的方式获得目标分支git rev-parse --abbrev-ref HEAD
但是HEAD和HEAD ^都指向目标分支。有没有办法以编程方式确定来源?我正在使用bash脚本进行挂钩。
默认的合并提交消息包含以下文本:
合并分支' source-branch'进入目标分支
因此,commit-msg挂钩可以直接从消息中获取名称,但不能保证用户没有编辑它。如果有一个更加万无一失的方法,我宁愿这样做。
编辑:啊,不幸的是我也没有意识到commit-msg实际上甚至没有在合并提交上运行!因此,无论如何,我必须找到一种不同的方式来做我想做的事。
答案 0 :(得分:2)
这将为您提供合并提交:
git rev-parse MERGE_HEAD
我认为除了使用如下命令猜测之外,还有办法找到分支名称:
git for-each-ref | grep ^$(git rev-parse MERGE_HEAD)
(找到指向您正在合并的提交的所有分支)
请注意,正在合并的提交不会必须成为分支,也可以直接合并提交,如git merge deadbeef
。
在章鱼合并的情况下,同时合并了多个提交,并且MERGE_HEAD
不存在。
如果要从合并消息中提取它,那么使用.git/MERGE_MSG
比.git/COMMIT_EDITMSG
更安全,因为它不太可能被手动编辑。
消息由git merge
生成,因此可以从git merge
的参数访问分支名称,但这似乎不会存储在磁盘上。