这个问题说明了一切。有没有办法在合并之前执行操作?我猜有一种方法可以使用pre-commit
钩子,但我不太确定。
答案 0 :(得分:19)
您可以尝试使用prepare-commit-msg
挂钩。如果提交是合并或merge
文件存在,则第二个参数将为.git/MERGE_MSG
“。非零退出状态将中止提交。
我认为这不适用于快进合并,因为不会有提交消息。
关于钩子的更多信息:https://www.kernel.org/pub/software/scm/git/docs/githooks.html#_prepare_commit_msg
答案 1 :(得分:10)
使用Git 2.24(2019年第四季度),无需脚本包装或准备消息挂钩。
引入了新的“ pre-merge-commi t”钩子。
请参见commit bc40ce4的commit 6098817,commit a1f3dd7,Michael J Gruber (mjg
)(2019年8月7日)。
请参见commit f78f6c7的Josh Steadmon (steadmon
)(2019年8月7日)。
(由Junio C Hamano -- gitster
--在commit f76bd8c中合并,2019年9月18日)
git-merge
:荣誉pre-merge-commit
钩
git-merge
在执行自动合并时不遵守预提交挂钩 提交,并且出于兼容性原因,这种情况将保留。引入一个
pre-merge-commit
挂钩,该挂钩被称为自动合并 就像pre-commit一样,commit会进行非自动合并提交 (或其他任何提交)。
documentation现在包括:
合并前提交
此钩子由
git-merge
调用。
它不带任何参数,并且在成功执行合并之后并在获取建议的提交日志消息以进行提交之前被调用。
从该脚本以非零状态退出会导致git merge
命令在创建提交之前 中止。如果启用了默认的“ pre-merge-commit”钩子,则在启用后运行“ pre-commit”钩子。
如果该命令不会调出编辑器来修改提交消息,则使用环境变量
GIT_EDITOR=:
调用此钩子。如果无法自动执行合并,则需要解决冲突,并分别提交结果(请参见
git-merge
)。
届时,该钩子将不会执行,但如果启用了'pre-commit
钩子。
答案 2 :(得分:0)
另一个不错的解决方法是添加一个shell脚本,调用它就像你想要的那样, 然后将这些行添加到脚本中:
git() {
if [ "$1" == "merge" ]; then
echo "seems to work like a charme"
fi
command git "$@"
}
git "$@"
然后制作一个
alias git="./my-pre-merge-script.sh"
然后你很高兴。您刚刚添加了自己的预合并挂钩。 我知道,你没有访问git会传递给真正的预合并钩子的任何参数,但你可以准备文件或任何你想准备合并的东西;我个人对这种方法非常满意:我花了2或3天的时间来寻找合并前的东西,然后我不得不使用pre-commit-msg,我找不到足够的准确性以满足我的需求。这解决了我所有的问题。希望这有助于将来的任何人。