在预 merge 提交
中,我需要 merge 头的哈希值来验证有关即将 merge 到当前分支的提交的一些信息。
但是,在钩子(Hook)运行时,引用 MERGE_HEAD
和文件 .git/MERGE_HEAD
似乎都不存在。
如何在我的钩子(Hook)中获取 merge 头修订版?
最佳答案
我必须执行完全相同的任务,并且遇到同样的问题:当 pre-merge-commit
时没有 MERGE_HEAD
/MERGE_MSG
> 钩子(Hook)被触发。
意味着无法知道正在 merge 到 HEAD 的源提交/分支。
到目前为止唯一的解决方法是使用 prepare-commit-msg
hook可以使用 MERGE_HEAD
/MERGE_MSG
(我使用后者来提取源分支名称,如 torek 解释 in another answer )
当然,也有缺点:
- 最大的一个是这个“提交工作流 Hook ”发生在解决可能的冲突之后。。如果此时您的钩子(Hook)退出
1
,则所有分辨率都将丢失。
(结果仍在索引中,但如果由于钩子(Hook)拒绝 merge 而必须git merge --abort
...则索引将被清除) - 每次提交(无论是否 merge )都会触发它,因此您需要测试
MERGE_HEAD
不存在的情况,以及exit 0
。 - 它会稍微减慢每次提交(而不仅仅是 merge 提交)的执行速度,因为它需要生成
prepare-commit-msg
Hook 。这主要在 Windows 上可见。
关于git - 在预 merge 提交 Hook 中获取 MERGE_HEAD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73639607/