You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用--no-ff合并时Git无法读取作者相关环境变量的问题

问题原因与解决方案

问题根源

当你执行git merge --no-ff却不通过-m参数指定提交消息时,Git会启动编辑器让你编辑合并提交的内容。此时commit-msg钩子运行时,Git不会将GIT_AUTHOR_NAME、GIT_COMMITTER_NAME这类作者相关的环境变量传入钩子进程,导致你在钩子中读取不到这些值。

这是因为这种合并场景下,Git默认直接使用当前本地Git配置里的user.name和user.email作为提交的作者/提交者信息,但不会通过环境变量把这些值传递给钩子,而是在最终创建提交时直接调用配置值。

解决办法

1. 从Git配置直接获取作者信息(推荐)

放弃依赖GIT_AUTHOR_NAME等环境变量,在commit-msg钩子脚本里用Git命令直接读取本地配置的用户信息:

# 获取当前用户的作者名和邮箱
AUTHOR_NAME=$(git config user.name)
AUTHOR_EMAIL=$(git config user.email)
COMMITTER_NAME=$(git config user.name)
COMMITTER_EMAIL=$(git config user.email)

这种方式不管是普通提交还是合并提交,都能稳定获取到执行当前Git操作的用户信息,适配所有场景。

2. 合并时直接指定提交消息

如果不需要手动编辑合并消息,可以在合并时用-m参数直接指定内容:

git merge --no-ff -m "合并release/1.2.0分支到master" release/1.2.0

这种场景下Git不需要启动编辑器,commit-msg钩子运行的上下文和普通提交一致,会正常传入GIT_AUTHOR_NAME等环境变量。

3. 针对release分支作者的特殊处理(如果需要)

如果你的白名单逻辑是针对release分支上的提交作者(而非执行合并操作的用户),可以通过命令获取release分支的最后提交作者:

# 获取release/1.2.0分支最后一次提交的作者名
RELEASE_AUTHOR=$(git log -1 release/1.2.0 --pretty=format:"%an")

再基于这个值做白名单校验即可。


内容的提问来源于stack exchange,提问作者Norayr Ghukasyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:15:20