git使用git rm命令删除不在.gitignore中的文件

时间:2012-08-14 20:13:28

标签: git

我有一个像这样的结构

SDI
|-.gitignore
\-webapp

在SDI / webapp / app目录中,当我运行git rm -r --cached .时,我看到这样的文件已被删除

rm 'webapp/app/views/MyStuff/myGroups.html'
rm 'webapp/app/views/MyStuff/userAdd.html'
rm 'webapp/app/views/MyStuff/userEdit.html'
rm 'webapp/app/views/auth/Secure/login.html'
rm 'webapp/app/views/errors/404.html'
rm 'webapp/app/views/errors/500.html'
rm 'webapp/app/views/main.html'
rm 'webapp/app/views/tags/auth/check.tag'
rm 'webapp/app/views/tags/generic.html'
rm 'webapp/app/views/tags/text.html'

我的.gitignore contents如下

eclipse/
tmp/
bin/
tools/play-1.2.5/framework/pym/

为什么删除我的所有文件?我有git config file.mode false作为此存储库中唯一独特的东西,而不是我过去做过的其他东西。

2 个答案:

答案 0 :(得分:4)

  • 在实际上不删除文件时,它只删除索引中的更改。你的工作空间仍然没有改变。
  • 这样做,因为你告诉它这样做。

http://www.kernel.org/pub/software/scm/git/docs/git-rm.html

  

从索引中删除文件,或从工作树和索引中删除文件。 git rm不会从您的工作目录中删除文件。 (没有选项只能从工作树中删除文件并将其保留在索引中;如果要这样做,请使用/ bin / rm。)要删除的文件必须与分支的顶端相同,并且不能在索引中暂存其内容的更新,但可以使用-f选项覆盖该默认行为。当给出--cached时,分阶段内容必须匹配分支的尖端或磁盘上的文件,允许从索引中删除文件。

  

<强> -r   在给出前导目录名时允许递归删除。

  

<强> - 缓存   使用此选项仅从索引中取消暂存和删除路径。无论是否修改了工作树文件,都将保持不变。

我不知道,你想要实现什么(因为你没有说出来),但命令确切地说,它应该做什么以及它应该如何。

.gitignore“只是”告诉git在递归调用git add(例如git add .git commit -a)时不向索引添加更改,或在{ {1}}(可能还有其他工具,但这是最常见的用例)。由于无论如何都不应对此文件进行更改,git status不会影响它们。

答案 1 :(得分:3)

它不是删除你的文件,而是取消它们。您忽略的文件将被忽略。所以不要担心。如果要删除被忽略的文件,可以

git clean -xdf

更新:

更安全的方法(如评论中所述)如果你有一个你关心的文件是

git stash -u && git clean -xdf