为什么git rm --cached不会删除本地曾经跟踪过的文件而是其他文件

问题描述 投票:2回答:3

在git存储库中取消跟踪文件时,请使用git rm -r --cached .。这不会删除本地存储中的跟踪文件,但是当其他开发人员使用git pull获取此提交时,将在其计算机存储上删除所跟踪的文件。

您可以使用以下内容重现它​​:

  1. 保存当前的工作。 (机器A)
git add .
git stash save "work position"
  1. 创建一个新文件并提交它。(机器A)
echo hello>>file_not_to_track
git add .
git commit -m "add file file_not_to_track"
  1. 从另一台机器(或另一个目录)拉出(机器B)
git pull

现在显示文件

ls
file_not_to_track  README.md
  1. 跟踪文件。(机器A)
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
  1. 获取代码(机器B)
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 .删除其他回购的跟踪文件,但不在当前的回购。

git caching gitignore git-rm
3个回答
3
投票

在机器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执行一个狡猾的行动。


3
投票

git rm --cached跟踪从git中删除文件的更改,但不删除本地副本。在本地运行ls仍然会显示本地文件,但是如果从另一台机器上拉,将删除删除该文件的更改,并删除该文件。


3
投票

这是选项--cached的工作原理,它从git索引中删除文件。工作树文件将保持不变。但是,Git将不再在本地存储库中跟踪此文件。

在这里查看--cached选项:

https://git-scm.com/docs/git-rm

© www.soinside.com 2019 - 2024. All rights reserved.