根据git rm doc,
从索引或从工作树和索引中删除文件。git rm 不会仅从您的工作目录中删除文件。
还,
--cached:使用此选项仅从索引中取消和删除路径。工作树文件,无论是否修改,都将被保留。
现在,我发现他们改变工作树和索引的方式有所不同,我觉得它与上面的定义不符。
首先我跑了git rm --cached
,我看到了这个:
$ git rm --cached src/main/java/com/kang/pagination/PaginationResult.java
rm 'src/main/java/com/kang/pagination/PaginationResult.java'
$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: src/main/java/com/kang/pagination/PaginationResult.java
Untracked files:
(use "git add <file>..." to include in what will be committed)
src/main/java/com/kang/pagination/PaginationResult.java
我们可以看到更改为未跟踪的文件和暂存区。
当文件更改在暂存区时,为什么我们有文件在未跟踪区?
相反,如果我跑了git rm
,这就是我会得到的:
$ git rm src/main/java/com/kang/pagination/PaginationResult.java
rm 'src/main/java/com/kang/pagination/PaginationResult.java'
$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: src/main/java/com/kang/pagination/PaginationResult.java
请注意,这里我们没有未跟踪的文件。为什么 ?
尽管您进行了编辑,但您的问题的答案完全由命令的作用(而不是命令的内部工作)来解释。
也许混乱源于理解如何解释git status
。“未跟踪文件”是工作树中不在索引中的文件。(要在默认status
输出中列出,也不能忽略它。)
因此,如果您从一个干净的工作树开始,这意味着工作树中的任何文件也在索引中 - 因此不会被跟踪。
但是,如果您使用git rm --cached
该文件,它会从索引中删除,而被单独留在工作树中。这意味着 wokrtree 中现在有一个不在索引中的文件,因此除非忽略该路径,否则它将显示为未跟踪的文件 - 即使工作树本身没有任何更改。
这不同于git rm
(没有--cached
参数)不是在内部工作方面,而是在命令的作用方面。此命令还会从工作树中删除文件;在这种情况下,最后工作树中没有文件,但索引中没有文件(未跟踪的文件)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句