git - 在预 merge 提交 Hook 中获取 MERGE_HEAD

标签 git git-merge githooks git-revision

预 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/

相关文章:

git - 将开发分支 merge 到主分支的最佳实践是什么

git - 如何从 git merge --log 获取完整消息

来自 repo 的 Git checkout 后 Hook

GIT Customer Merge 驱动问题(Windows msysgit 1.9.0)

git - 检查 Git 远程 Hook

git reset --hard -q 产生关于空格的错误

git - TortoiseGit - 将文件夹重置为原始文件

bash - 在 rebase 上自动删除恢复的提交

Git fetch 反复告诉我同一个新分支

git - 为什么 merge 这些分支没有任何作用?