如何取消跟踪文件但不将其从上游仓库移除?
当然没问题!我来帮你一步步修正这个问题——先把上游仓库的文件恢复回来,再设置本地不再跟踪它的变更,完全符合你的需求。
第一步:恢复上游仓库的文件
你之前的推送操作已经把文件从上游删掉了,所以首先得把它恢复回去:
- 恢复本地文件:找到删除文件之前的那个提交(如果删除是上一次提交,直接用
HEAD~1即可),执行命令把文件拉回本地:
执行后,本地就会重新出现这个文件了。git checkout HEAD~1 -- "你的目标文件名" - 撤销删除提交并推回上游:用
git revert生成一个新的提交来恢复文件,这种方式不会修改历史记录,更安全:
完成这两步后,上游仓库就会重新保留这个文件了。git revert HEAD git push
第二步:设置本地不再跟踪文件变更
现在要实现「本地保留文件,但Git不再监控它的修改,同时上游文件保持不变」,有两种常用方法:
方法一:.gitignore + skip-worktree(推荐)
- 把目标文件名添加到项目根目录的
.gitignore文件中:# 忽略目标文件,避免后续误提交 你的目标文件名 - 执行以下命令,让Git跳过这个文件的工作区检查:
之后你修改本地文件时,Git不会把它标记为变更,也不会在提交时包含它。git update-index --skip-worktree "你的目标文件名"
方法二:仅用skip-worktree(适合不想修改.gitignore的场景)
直接执行以下命令即可:
git update-index --skip-worktree "你的目标文件名"
这个命令会让Git在检查差异时忽略该文件的本地修改,同样能达到「本地不跟踪、上游文件保留」的效果。
补充小提示
如果之后你想恢复跟踪这个文件,只需要执行:
git update-index --no-skip-worktree "你的目标文件名"
另外一定要注意:不要再执行git rm --cached后提交,那样会再次把文件从上游仓库删除,这正是你之前踩的坑~
内容的提问来源于stack exchange,提问作者mrfr
相关产品推荐
相关产品推荐

