git rm --cached和git reset <file>有什么区别?

时间:2016-06-23 20:27:49

标签: git

根据git rm documentation

--cached
Use this option to unstage and remove paths only from the index.    
Working tree files, whether modified or not, will be left alone.

但根据this resource取消暂存文件

git reset HEAD <file>

有什么区别?有吗?

2 个答案:

答案 0 :(得分:6)

使用git rm --cached您可以暂存要删除的文件,但不要将其从工作目录中删除。该文件将显示为未跟踪。

试驾

git init test_repo
cd test_repo

touch test
git add test
git commit -m 'Added file test

git rm --cached test

git status
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    test      <---- staged for removal

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        test              <-- still in the working dir

使用git reset <file>,您可以取消暂存文件。在上面的示例中,您可能希望使用git reset test取消删除。

git reset test
git status
On branch master
nothing to commit, working directory clean

答案 1 :(得分:1)

git rm --cached从索引中删除该文件,但将其保留在工作目录中。这向Git表明您不想再跟踪该文件。

git reset HEAD将文件作为索引中的跟踪文件,但索引中缓存的修改将丢失。这就好像缓存中的文件已被HEAD中的文件覆盖(并且工作树文件未被触及)