为什么git rm --cached命令不能删除本地已经被跟踪的文件,但可以删除其他文件?

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

取消跟踪该文件。(计算机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 . 删除其他存储库中已跟踪的文件,但当前存储库中没有。

3个回答

2

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


2

在机器A上:

git rm -r --cached .

上述命令将从索引中删除文件(包括README.md和file_not_to_track)。此时,索引为空。然而,file_not_to_track仍然存在于文件系统中。
--cached选项:使用此选项仅从索引中取消暂存并删除路径。工作树中的文件,无论是否修改,都将保持不变。
git add .

使用add操作,git只添加了README文件。(忽略了file_not_to_track文件)。
在机器B上:

2个文件发生了变化,1次插入(+),1次删除(-)

使用pull操作,git意识到file_not_to_track已经不存在。Git执行了删除操作。

2
这就是选项--cached的工作原理,它会从Git索引中删除文件,但工作树文件将保持不变。然而,Git将不再在您的本地仓库中跟踪此文件。
点击这里查看--cached选项: https://git-scm.com/docs/git-rm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接