如何从Git仓库移除.gitignore所列文件且不产生空白符变更
Git清理已忽略文件时避免空白符变更的方法
问题描述
我此前已了解过如何使用Git命令从仓库中移除已加入忽略规则的文件。
我当前使用Visual Studio 2019,仓库托管在Azure DevOps,操作流程如下:
- 在Git资源管理器菜单中选择「在命令提示符中打开」
- 执行
git rm -r --cached .,该命令会让Git停止跟踪所有文件,执行后「暂存的更改」列表中所有文件都显示为已删除,「更改」列表中有少量文件显示为已添加,状态看起来是正常的。我原本推测被忽略的文件不会被重新添加,提交这些变更后,原本应被忽略的文件就会在服务端被删除。 - 执行暂存操作后出现异常:所有已添加的文件都显示为已修改。
- 推送后在浏览器中查看变更时提示:「仅显示前999条变更,点击加载更多」,且所有可见文件都有警告:「文件仅在空白符上存在差异」。
该问题是换行符差异导致的,严重影响变更审核。需要解决的需求包括:执行清理忽略文件流程时避免产生空白符变更、撤销已产生的空白符变更、让Git仅提交删除操作。
解决方法
按顺序执行以下命令即可:
git rm -r --cached . git config --global core.autocrlf false git add --renormalize . git add . git commit
命令作用说明
git rm -r --cached .:清除本地Git的所有文件跟踪缓存,工作区的实际文件不会被改动git config --global core.autocrlf false:关闭Git自动转换换行符的全局配置,避免跨系统的换行符差异被Git识别为文件变更git add --renormalize .:对所有文件重新执行换行符规范化,按照Git的标准规则将文件添加到暂存区,直接抵消之前产生的空白符差异- 后续执行
git add .和git commit完成提交即可,此时提交内容仅包含应被移除的忽略文件的删除操作,不会产生多余的空白符变更
内容的提问来源于stack exchange,提问作者Colin
相关产品推荐
相关产品推荐

