是否可以使用预推送挂钩编辑 Git 提交消息?

问题描述 投票:0回答:1

在用户推送他们的提交之前,我想将分支名称预先添加到提交消息中。 这可能吗?

如果是,我会使用

git commit --amend
命令吗?

我们的分支名称包含票号,当其合并到 master 和 Jenkins 中时查看此信息很重要。 为了容易地看到它,它必须是提交消息中的第一行。 为了确保第一行是分支名称(包含票号),我想使用预推送挂钩。 我可以使用其他钩子,例如

prepare-commit-message
或使用消息模板,但这会将分支名称放在每次提交上,并且不能确保分支名称在变基后存在。 使用预推送可确保分支名称在进入远程之前就存在。

==============

更新:是的,这是可能的,但这是一个坏主意。

预推送挂钩在运行之前但在推送任何对象之前将引用与远程同步。 这意味着远程已经为您推送的更改设置了提交 sha。 当 pre-push 钩子修改提交消息时,会生成一个新的 sha,使您立即与远程不同步。

    

git githooks
1个回答
4
投票
git commit --amend

所做的不是“编辑提交”,而是将提交放在一边并更改当前分支名称(无论是什么)以指向新提交。 “之前”的图片是: ...--o--o--* <--current_branch (HEAD) “之后”是:


* [abandoned - in reflog as HEAD@{1}, etc] / ...--o--o--X <--current_branch (HEAD)

但是预推送挂钩在您的 Git 已经调用另一个 Git 并通过其哈希 ID 向其发送提交 
*

后运行。 事实上,您已将

 提交 
*

替换为新的改进的提交

X
,这一事实现在已经无关紧要:您的 Git 致力于推送提交 * 并要求他们的 Git 将
他们的
分支设置为指向(他们的副本)提交
*

在这个预推钩子中,你可以做的是拒绝来自你自己端的推送。 现在推送被拒绝并失败,您可以重新运行
git push
命令。 这次您将建议向他们发送提交

X

。 如果看起来正确,您将不需要运行 git commit --amend,并且可以将提交

X
留在原地进行推送,然后让推送运行。

请注意,在
 Git 之外执行此操作要好得多。  而不是:

$ git push remotename HEAD:somebranch

或者无论你实际运行什么,你都会运行: $ jirapush

这是你自己的脚本。  在此脚本中,您可以以任何顺序运行您喜欢的任何 Git 命令,
before

运行

git push remotename <hash>:<branchname>
 或您将在最后运行的任何命令。  这些 Git 命令可以包括,例如:

generate_new_commit_message_text | git commit --amend -F - 如果需要的话。 因为这一切都发生在

 
git push

启动之前,所以现在正是做你想做的事情的时候。
    

© www.soinside.com 2019 - 2024. All rights reserved.