Git提交异常:无论暂存哪些文件都会提交所有变更文件
解决Git提交时自动包含所有变更文件的问题
我碰到过不少开发者遇到和你一模一样的问题——明明只暂存了部分文件,提交时却把所有变更都带进去了,而且跨VS Code和Git Bash都复现,说明不是单一工具的问题,咱们一步步排查解决:
1. 检查Git全局/本地的commit.autoStage配置
这个配置是最常见的“元凶”:如果开启了它,Git会自动把所有未暂存的变更加入暂存区然后提交,完全跳过你手动暂存的步骤。
- 先打开Git Bash,执行
git config --global commit.autoStage,如果返回true,直接执行下面的命令关闭:git config --global commit.autoStage false - 还要检查当前仓库的本地配置(全局配置可能被仓库本地配置覆盖):
如果返回git config --local commit.autoStagetrue,同样执行git config --local commit.autoStage false关闭
2. 确认暂存区状态是否符合预期
有时候你以为自己只暂存了目标文件,但实际操作可能有误:
- 提交前一定要执行
git status,仔细看输出里的两个区块:- Changes to be committed:这里是真正会被提交的文件
- Changes not staged for commit:这里是未暂存的变更,正常提交不会包含它们
- 如果发现所有变更都在暂存区,大概率是之前不小心执行了
git add .或者git add -A,这时候可以用git reset HEAD -- filename.example取消特定文件的暂存,再提交测试
3. 检查VS Code的Git扩展自动暂存设置
VS Code的Git插件有几个容易踩坑的自动设置:
- 打开VS Code设置(快捷键
Ctrl+,),搜索git enableSmartCommit:这个选项开启后,会自动暂存所有变更并提交,直接关掉它 - 再搜索
git autoStage:确保这个选项也是关闭状态,它会自动暂存你修改的文件
4. 排查Git钩子脚本
自定义的Git钩子可能会偷偷帮你执行git add .这类命令:
- 进入你的仓库目录,找到
.git/hooks文件夹(这个文件夹默认隐藏,Windows下要开启显示隐藏文件) - 查看里面有没有
pre-commit、prepare-commit-msg这类脚本文件,如果里面包含git add .或者git add -A的命令,这就是问题所在 - 可以先把可疑脚本重命名(比如改成
pre-commit.bak),然后再测试提交
5. 升级Git版本(可选但推荐)
你当前用的Git版本是2.16.1,已经是比较老的版本了,虽然你重装过,但旧版本可能存在一些已知的bug。建议升级到最新的稳定版Git(比如2.40.x以上),新版本修复了很多旧版本的兼容性和功能问题,说不定能直接解决这个异常。
验证方法
修改2-3个不同的文件,只暂存其中一个(比如git add test.txt),然后执行git commit -m "test partial commit",最后用git log --stat查看提交记录,确认只有你暂存的文件出现在提交里。
内容的提问来源于stack exchange,提问作者Yoshi
相关产品推荐
相关产品推荐

