&#34; git rm --cached <filename>&#34;同时删除工作副本

时间:2018-04-05 16:12:58

标签: git

我的工作目录是:

~/Desktop/git_que on brA
$ ls
book.json  README.md  SUMMARY.md

现在我将添加&#34; README.md&#34; to&#34; .gitignore&#34;:

~/Desktop/git_que on brA!
$ cat .gitignore
README.md

然后让我们删除文件:

~/Desktop/git_que on brA!
$ git rm --cached README.md
rm 'README.md'

并且&#39;添加&#39;临时区域:

~/Desktop/git_que on brA!
$ git add . 

~/Desktop/git_que on brA!
$ git status
On branch brA
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   .gitignore
    deleted:    README.md

很好,让我们提交&#39;:

~/Desktop/git_que on brA!
$ git commit -m "ignore README.md"
[brA 5e80102] ignore README.md
 2 files changed, 1 insertion(+), 29 deletions(-)
 create mode 100644 .gitignore
 delete mode 100644 README.md

~/Desktop/git_que on brA
$ git status
On branch brA
nothing to commit, working directory clean

让我们在目录中列出文件:

~/Desktop/git_que on brA
$ ls
book.json  README.md  SUMMARY.md

如预期的那样好。现在,让我们将分支切换到&#39; brB&#39;然后回到&#39; brA&#39;再次:

~/Desktop/git_que on brA
$ git checkout brB
Switched to branch 'brB'

~/Desktop/git_que on brB
$ git checkout brA
Switched to branch 'brA'

再次让目录中的列表文件:

~/Desktop/git_que on brA
$ ls
book.json  SUMMARY.md

所以,我无法看到我的README.md文件。

问题1:我的档案在哪里,为什么我再也看不到了?

问题2:我想忽略此文件,但我想继续使用它。我的意思是, GIT 不跟踪它,不在任何地方共享;但该文件仍保留在我的本地工作目录中。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

git rm --cached未删除该文件。

git checkout 删除了该文件。

原因很简单:新提交的文件未被跟踪(并且不存在)。当您签出旧提交时, 文件被跟踪(因为 存在于提交中)。因此,当您检查旧提交时,将跟踪该文件,然后当您从旧提交切换到新提交时,Git会看到跟踪文件已从新提交中消失,并将其删除。

问题的根源是是路径P跟踪?索引的属性,git checkout填充索引来自提交。所以&#34;被追踪&#34;属性更改 - 至少可能 - 每次更改为&#34;哪次提交是签出提交&#34;。

从跟踪文件的提交转移到没有该文件的提交,从工作树中删除该文件(并从索引中删除 - 事实上,将其删除从索引为什么 Git将其从工作树中删除)。从没有该文件的提交转移到添加文件工作树(以及实际上将其添加到索引)索引是为什么 Git将ti添加到工作树中。)

这就是在某些提交中有文件的原因,而在其他提交中没有,当你希望在 no 提交中提供它但在任何时候都保留在工作树中,这么大问题。没有完美的解决方案。您可以为文件使用不同的名称,这种情况在没有提交的情况下发生;或者你可以小心地避免检查 拥有该文件的任何提交,这会导致文件进入索引并因此被跟踪。