删除所有已经基于.gitignore

时间:2019-03-10 16:23:03

标签: git gitignore

我尝试删除所有已添加到git仓库优秀的文件,这些文件未被.gitignore忽略

我的解决方法是:

  1. 首先我从git存储库中删除了所有文件
  2. 然后我添加了.gitignore不忽略的文件。

通过这种方式,文件被删除,之后立即添加(相同)。这当然是次优的,不是最大的性能。有没有更好的解决方案呢?

这里我尝试完成:

Administrator@SL5 MINGW64 /g/global-IntelliSense-everywhere-Nightly-Build (master)
$ git rm -r --cached .
rm 'AHK Studio Download Page.url'
rm 'ActionLists/ActionListNameFilter.inc.ahk'
rm 'ActionLists/ApplicationFrameWindow/ActionListNameFilter.inc.ahk'

Administrator@SL5 MINGW64 /g/global-IntelliSense-everywhere-Nightly-Build (master)
$ git commit -m 'Delete all the stuff'

Administrator@SL5 MINGW64 /g/global-IntelliSense-everywhere-Nightly-Build (master)
$ git rm -r -f .

Administrator@SL5 MINGW64 /g/global-IntelliSense-everywhere-Nightly-Build (master)
$ git commit -m 'Delete all the stuff'

我想如果我使用rm -r -f .而不是rm -r --cached .会产生相同的效果。 使用rm -r --cached .之后,不幸的是,存储库中仍然存在不应该存在的文件(关于.gitignore)。

git rm -r -f .,然后执行commit + push从git存储库中删除所有内容

1 个答案:

答案 0 :(得分:1)

git ls-files是索引感知文件列表的瑞士军刀。

git ls-files --exclude-standard -ci 

将列出每个缓存的文件,也称为暂存的文件,也称为索引索引的文件,也标记为自动添加将忽略的文件,因此您可以

git ls-files --exclude-standard -ci | git update-index --force-remove --stdin

或者也可以从工作树中删除

git ls-files --exclude-standard -ciz | xargs  -r0 git rm -f 

顺便说一句,我有git config --global alias.ls 'ls-files --exclude-standard,所以对我来说,nuke-em是

git ls -ciz|xargs -r0 rm -f