【问题标题】:Why git rm --cached not remove local ever tracked file but others为什么 git rm --cached 不删除本地曾经跟踪的文件而是其他文件
【发布时间】:2019-09-03 21:49:25
【问题描述】:

取消跟踪 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 . 删除曾经在其他 repo 上跟踪过的文件,但不在当前 repo 中。

【问题讨论】:

    标签: git caching gitignore git-rm


    【解决方案1】:

    在机器 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】:

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

      【讨论】:

        【解决方案3】:

        这就是选项 --cached 的工作原理,它从 git 索引中删除文件。工作树文件将被单独留下。但是,Git 将不再在您的本地存储库中跟踪此文件。

        在此处查找 --cached 选项:

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

        【讨论】:

          猜你喜欢
          • 2017-12-16
          • 1970-01-01
          • 2017-04-01
          • 2014-05-02
          • 2023-03-16
          • 1970-01-01
          • 2023-03-09
          • 2011-09-24
          • 2017-03-06
          相关资源
          最近更新 更多