在git存储库中取消跟踪文件时,请使用git rm -r --cached .
。这不会删除本地存储中的跟踪文件,但是当其他开发人员使用git pull
获取此提交时,将在其计算机存储上删除所跟踪的文件。
您可以使用以下内容重现它:
git add .
git stash save "work position"
echo hello>>file_not_to_track
git add .
git commit -m "add file file_not_to_track"
git pull
现在显示文件
ls
file_not_to_track README.md
echo file_not_to_track >> .gitignore
git rm -r --cached .
git add .
git commit -m "untrack file_not_to_track"
git push
现在显示文件
ls
file_not_to_track README.md
git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From example.com:my/example_project
6525df1..f413f8b master -> origin/master
Updating 6525df1..f413f8b
Fast-forward
.gitignore | 1 +
file_not_to_track | 1 -
2 files changed, 1 insertion(+), 1 deletion(-)
create mode 100644 .gitignore
delete mode 100644 file_not_to_track
现在显示文件
ls
README.md
因为它显示git rm -r --cached .
删除其他回购的跟踪文件,但不在当前的回购。
在机器A:
git rm -r --cached .
上面的命令将从索引中删除文件(README.md和file_not_to_track)。此时,索引为空。但是,file_not_to_track仍然存在于文件系统中。
--cached:使用此选项仅从索引中取消暂存和删除路径。无论是否修改了工作树文件,都将保持不变。
git add .
使用add action,git只添加了README文件。 (file_not_to_track已被忽略)。
在机器B上:
更改了2个文件,1个插入(+),1个删除( - )
通过pull动作,git识别出file_not_to_track消失了。 Git执行一个狡猾的行动。
git rm --cached
跟踪从git中删除文件的更改,但不删除本地副本。在本地运行ls
仍然会显示本地文件,但是如果从另一台机器上拉,将删除删除该文件的更改,并删除该文件。
这是选项--cached的工作原理,它从git索引中删除文件。工作树文件将保持不变。但是,Git将不再在本地存储库中跟踪此文件。
在这里查看--cached选项: