执行git reset --hard后本地文件未匹配origin远程分支的问题求助
Git执行reset --hard后本地文件仍不匹配远程分支的解决方案
常见原因及对应处理方法
- 未追踪/忽略文件残留
git reset --hard只会修改被Git纳入追踪的文件,本地未执行过git add的文件、被.gitignore规则匹配的忽略文件不会被该命令处理,残留的这类文件会导致工作区看起来和远程分支内容不一致。
处理命令:# 仅删除所有未被Git追踪的文件和空目录,执行前请备份需要保留的本地私有文件 git clean -fd # 若需要同时删除被.gitignore忽略的文件,追加x参数 git clean -fdx - 子模块未同步更新
如果当前仓库包含Git子模块,git reset --hard不会自动同步子模块的版本,子模块目录会保留旧版本内容。
处理命令:git submodule update --init --recursive - 行尾符自动转换导致的感知差异
Git的core.autocrlf配置会自动在本地和远程之间转换换行符,会出现文件内容在本地查看和远程显示不一致,但Git判定内容一致的情况。
处理方法:- 执行
git config core.autocrlf查看当前配置,Windows系统建议设为true,Mac/Linux系统建议设为input,无需自动转换可设为false - 如需统一工作区行尾符,执行以下命令重置:
git rm --cached -r . git reset --hard - 执行
验证方法
所有操作完成后执行git diff origin/XX,无任何输出即代表当前本地工作区和origin/XX远程分支内容完全一致。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

