在用户提交提交之前,我想将分支名称预先挂起到提交消息。这可能吗?
如果是,我会使用git commit --amend
命令吗?
我们的分支机构名称包含机票编号,当它合并到主机和Jenkins中时,它很重要。要轻松查看,它必须是提交消息中的第一行。为了确保第一行是分支名称(包含票号),我想使用预推钩。我可以使用其他钩子,例如prepare-commit-message
或使用消息模板,但是在每次提交时都会放置分支名称,并且它不能确保在rebase之后分支名称存在。使用pre-push可确保分支名称在进入远程之前就已存在。
=============
pre-push hook会在运行之前但在推送任何对象之前将refs与远程同步。这意味着远程已经为您正在推送的更改设置了提交sha。当pre-push
挂钩修改提交消息时,会生成一个新的sha,使您立即与远程同步。
答案 0 :(得分:2)
正如您所发现的,答案实际上是“不”。事实上,由于更深层次的技术原因,它真正“不”:编辑任何提交是不可能的。 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将他们的分支设置为指向(他们的副本)commit *
。
在这个预推钩中你可以做的是拒绝来自你自己的推动。现在推送被拒绝并失败,您可以重新运行git push
命令。这次你建议发送它们X
。如果它看起来正确,您将无需运行git commit --amend
并且可以保留提交X
以进行推送,并让推送运行。
请注意,在外部 Git中执行此操作要好得多。而不是:
$ git push remotename HEAD:somebranch
或者你实际运行的是什么,你只需要运行:
$ jirapush
这是你自己的脚本。在这个脚本中,您可以按照任何顺序运行您喜欢的任何Git命令,运行git push remotename <hash>:<branchname>
之前的或者您将在最后运行的任何内容。那些Git命令可以包括,例如:
generate_new_commit_message_text | git commit --amend -F -
如有必要。由于在 git push
之前发生了,所以你可以随时做任何想做的事情。