Git清理缓存后已忽略文件夹被仓库移除,如何避免?
解决Git忽略生效且不删除仓库文件的方法
问题本质
你之前用git rm -r --cached .的操作太粗暴——这个命令会把所有已被Git追踪的文件从索引中移除,推送到远程后仓库里的对应文件自然会被删除。而你需要的是:仓库保留现有文件,本地不再追踪这些文件的变更,同时让.gitignore生效。
正确操作流程
情况1:还没推送git rm的变更
- 先撤销错误操作,恢复索引:
git reset HEAD . - 针对你想忽略的已追踪文件/文件夹,执行命令让Git停止追踪它们的变更(仓库文件会保留):
比如要忽略git update-index --assume-unchanged 目标文件/文件夹路径logs文件夹,就执行git update-index --assume-unchanged -r logs(-r用于递归处理文件夹) - 确认
.gitignore已包含这些目标路径,然后提交并推送.gitignore:git add .gitignore git commit -m "更新.gitignore,设置忽略指定文件/文件夹" git push
情况2:已经推送了git rm的变更(仓库文件已被删除)
- 先从远程仓库恢复被删除的文件:
(把git checkout origin/main -- 被删除的文件/文件夹路径main换成你的实际分支名) - 按情况1的步骤2、3操作,设置Git不再追踪这些文件的变更,同时更新
.gitignore并推送。
补充说明
git update-index --assume-unchanged的作用是让Git认为这些文件没有修改,因此不会在git status中显示,也不会被提交。- 如果之后需要恢复追踪这些文件,执行:
git update-index --no-assume-unchanged 目标文件/文件夹路径
内容的提问来源于stack exchange,提问作者Steve James
相关产品推荐
相关产品推荐

