在合并提交

时间:2015-04-29 07:25:49

标签: git

在合并提交的commit-msg挂钩中,如何获取合并的直接源分支的分支名称?我可以通过类似

的方式获得目标分支
git rev-parse --abbrev-ref HEAD

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

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

  

合并分支' source-branch'进入目标分支

因此,commit-msg挂钩可以直接从消息中获取名称,但不能保证用户没有编辑它。如果有一个更加万无一失的方法,我宁愿这样做。

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

1 个答案:

答案 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的参数访问分支名称,但这似乎不会存储在磁盘上。