在.gitignore中列出的所有内容,都可以使用git rm --cached命令从Git中移除。

8

我在所有内容都提交后,将.gitignore添加到了我的项目中。现在我想运行类似以下命令的命令:

git rm --cached *everything_listed_in_gitignore*

如何实现这一点?提前感谢您。
3个回答

8
我找到了另一种方法,它可以在任何操作系统中更好地工作,具体步骤请查看https://ardalis.com/how-to-make-git-forget-tracked-files-in-gitignore。在添加新规则到.gitignore文件之后,此方法更加有效。
git rm -r --cached .

git add .

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

6

有一个更简短的版本,答案来自这里

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

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

或者,作为替代,在Windows Powershell上:
git rm --cached $(git ls-files -i -X .gitignore)

无法在Windows上运行:致命错误:ls-files -i必须与-o或-c一起使用 致命错误:未给出路径规范。我应该删除哪些文件? - Banik
在Mac OS上完美运行。 - Rajan Verma - Aarvy

4

我总是使用以下命令来移除在我的 .gitignore 文件中列出的文件:

grep -vP "^(#|\$)" .gitignore|sed "s/^\///"|xargs rm -f
  1. 这将在 .gitignore 文件中查找不匹配正则表达式 ^(#|\$) 的行(使用 grep 命令的 -v 选项),与以 # 开头的行(注释)或空行相匹配。

  2. 接下来,sed 命令将移除行首的斜杠 /

  3. 结果将通过 xargs 传递给 rm -f 命令,你也可以用 git rm --cached 替换它。

注意:

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


2
如果你的 macOS 标准 grep 缺少 -P 选项,则可以通过 brew install grep --with-default-names 安装一个。 - Blaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接