为什么 git rm --cached 不删除本地曾经跟踪的文件而是其他文件
Why git rm --cached not remove local ever tracked file but others
取消跟踪 git 存储库中的文件时,使用 git rm -r --cached .
。这不会删除本地存储中曾经跟踪过的文件,但是当其他开发人员使用 git pull
获取此提交时,曾经跟踪过的文件将在他们的机器存储中删除。
您可以通过以下方式复制它:
- 保存当前工作。 (机器A)
git add .
git stash save "work position"
- 创建一个新文件并提交。(机器A)
echo hello>>file_not_to_track
git add .
git commit -m "add file file_not_to_track"
- 从另一台机器(或另一个目录)拉取(机器 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
- 获取代码(机器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 rm --cached
跟踪从 git 中删除文件的更改,但不会删除本地副本。 运行 ls
在本地仍会显示本地文件,但如果您从另一台机器上拉取,将应用删除该文件的更改,并删除该文件。
在机器 A 上:
git rm -r --cached .
以上命令将从索引中删除文件(README.md 和 file_not_to_track)。此时,索引为空。但是,file_not_to_track 仍然存在于文件系统中。
--cached: Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.
git add .
使用 add 操作,git 仅添加了 README 文件。 (file_not_to_track 已被忽略)。
在机器 B 上:
2 files changed, 1 insertion(+), 1 deletion(-)
通过pull 操作,git 识别出file_not_to_track 已消失。 Git 执行删除操作。
这就是选项 --cached 的工作原理,它将文件从 git 索引中删除。工作树文件将单独保留。但是,Git 将不再在您的本地存储库中跟踪此文件。
在此处查找 --cached 选项:
取消跟踪 git 存储库中的文件时,使用 git rm -r --cached .
。这不会删除本地存储中曾经跟踪过的文件,但是当其他开发人员使用 git pull
获取此提交时,曾经跟踪过的文件将在他们的机器存储中删除。
您可以通过以下方式复制它:
- 保存当前工作。 (机器A)
git add .
git stash save "work position"
- 创建一个新文件并提交。(机器A)
echo hello>>file_not_to_track
git add .
git commit -m "add file file_not_to_track"
- 从另一台机器(或另一个目录)拉取(机器 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
- 获取代码(机器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 rm --cached
跟踪从 git 中删除文件的更改,但不会删除本地副本。 运行 ls
在本地仍会显示本地文件,但如果您从另一台机器上拉取,将应用删除该文件的更改,并删除该文件。
在机器 A 上:
git rm -r --cached .
以上命令将从索引中删除文件(README.md 和 file_not_to_track)。此时,索引为空。但是,file_not_to_track 仍然存在于文件系统中。
--cached: Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.
git add .
使用 add 操作,git 仅添加了 README 文件。 (file_not_to_track 已被忽略)。
在机器 B 上:
2 files changed, 1 insertion(+), 1 deletion(-)
通过pull 操作,git 识别出file_not_to_track 已消失。 Git 执行删除操作。
这就是选项 --cached 的工作原理,它将文件从 git 索引中删除。工作树文件将单独保留。但是,Git 将不再在您的本地存储库中跟踪此文件。
在此处查找 --cached 选项: