【问题标题】:git rm --cached everything that is listed in .gitignoregit rm --cached .gitignore 中列出的所有内容
【发布时间】:2016-06-05 13:15:21
【问题描述】:

在完成所有工作后,我将 .gitignore 添加到我的项目中。现在我想运行如下命令:

git rm --cached *everything_listed_in_gitignore*

如何做到这一点?提前谢谢你。

【问题讨论】:

    标签: git git-rm


    【解决方案1】:

    我总是使用以下行来删除我的.gitignore 中列出的文件:

    grep -vP "^(#|\$)" .gitignore|sed "s/^\///"|xargs rm -f
    
    1. 这将在 .gitignore 中找到不匹配的行(-v grep 选项)正则表达式 ^(#|\$) 匹配以 # (cmets) 开头的行或空行。

    2. 然后sed 将删除行首的正斜杠/

    3. 使用xargs 将结果传递给rm -f,您可以将其替换为git rm --cached

    注意:

    您的.gitignore 文件可以包含*.tmp 之类的条目,以忽略整个项目中的所有.tmp 文件。上述命令只会从根目录中删除 *.tmp 文件。只有完整路径才会被正确处理。

    【讨论】:

    【解决方案2】:

    我从https://ardalis.com/how-to-make-git-forget-tracked-files-in-gitignore 发现了另一种在任何操作系统中都能更好地工作的方法。

    向.gitignore添加新规则后

    git rm -r --cached .
    
    git add .
    

    基本上,它会删除所有内容并重新添加所有内容。添加时Git会忽略基于.gitignore的文件

    【讨论】:

      【解决方案3】:

      还有一个较短的版本,答案取自here

      您还可以根据您的 .gitignore 从存储库中删除文件,而无需从本地文件系统中删除它们:

      git rm --cached `git ls-files -i -X .gitignore`
      

      或者,在 Windows Powershell 上:

      git rm --cached $(git ls-files -i -X .gitignore)
      

      【讨论】:

        猜你喜欢
        • 2012-09-15
        • 2011-08-13
        • 1970-01-01
        • 2021-04-02
        • 2019-12-16
        • 2023-03-16
        • 2011-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多