繁体   English   中英

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

[英]git removing files that are not in .gitignore with git rm command

我有这样的结构

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作为该存储库中唯一的东西。

  • 在实际上不删除文件中,它仅从索引中删除更改。 您的工作空间保持不变。
  • 这样做是因为您告诉它这样做。

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

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

-r在给出前导目录名称时,允许递归删除。

--cached使用此选项可取消登台并仅从索引中删除路径。 无论是否已修改,工作树文件都将被保留。

我不知道您想要实现什么(因为您没有告诉),但是该命令可以准确地执行它应该执行的操作以及执行的方式。

.gitignore “ just”告诉git,当递归调用git add (例如git add .git commit -a ),或者以git status显示它们(可能还有其他工具,但不常见),不要向索引添加更改用例)。 因为无论如何都不应该对此文件进行更改,所以git rm不会影响它们。

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

git clean -xdf

更新:

如果您确实有需要的文件,更安全的方法(如评论中所述)是

git stash -u && git clean -xdf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM