设置git config --global merge.commit no后,合并仍自动提交?
可能的原因及对应解决步骤
本地仓库配置覆盖全局配置
Git的配置优先级为:本地仓库配置(.git/config)> 全局配置(~/.gitconfig)> 系统配置。如果你的本地仓库中已设置merge.commit=yes,会直接覆盖全局的no设置。
验证命令:git config --local merge.commit,若输出yes则说明存在覆盖。
解决:执行git config --local merge.commit no修改本地配置,或用git config --local --unset merge.commit删除本地该配置项。全局配置未被正确读取或写入
可能存在全局配置未成功写入,或Git读取的并非你修改的~/.gitconfig文件的情况。
验证命令:git config --list --show-origin,查看输出中是否存在merge.commit=no,且来源为file:/Users/你的用户名/.gitconfig。
解决:若看不到该配置,重新执行git config --global merge.commit no确保写入成功;若来源不符,检查是否有环境变量GIT_CONFIG修改了Git的配置文件路径。配置值的布尔格式问题
尽管Git支持yes/no作为布尔配置值,但部分版本可能对格式更敏感,尝试用false替代no:
执行命令:git config --global merge.commit false,之后再测试git merge feature是否生效。
补充说明
merge.commit=no的作用等同于每次执行git merge时添加--no-commit参数,合并完成后会停留在未提交状态,允许你检查或修改合并结果后再手动提交;而merge.ff=no是强制Git创建合并提交,即使当前分支可以快进合并。
内容的提问来源于stack exchange,提问作者user3183038

