代码之家  ›  专栏  ›  技术社区  ›  SL5net

删除所有已添加到基于.git的git存储库的文件

  •  0
  • SL5net  · 技术社区  · 5 年前

    我尝试删除所有已经添加到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—缓存。 不幸的是,存储库中仍有不应存在的文件(关于.gitignore)。

    git rm -r -f . 而commit+push会从git存储库中删除所有内容

    1 回复  |  直到 5 年前
        1
  •  1
  •   jthill    5 年前

    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 对我来说核弹是

    git ls -ciz|xargs -r0 rm -f