git 只清除跟踪的文件

git clean only tracked files

这是一个非常不寻常的用例,但我想从 git 存储库中删除所有跟踪的文件。是的,跟踪文件,不是未跟踪文件。

我有一大堆代码生成文件,其中一些是二进制文件,一些是文本文件。我希望能够跟踪文本生成文件的历史记录。我设置了忽略列表等。问题是下次我 运行 生成过程时,它将更改所需的文件,添加新文件,但不会删除未生成的旧文件了。删除整个工作树就可以了,但它也会删除二进制文件和其他已经存在的文件,我不想那样做。

如果我可以选择使用 git 只清理被跟踪的文件,那么最好使用已经准备好的 complex .gitignore file 来区分文件,但我不会查看文档中的任何内容。

从工作树中删除所有被跟踪的文件是否有棘手的选项。

如果您想删除 master 分支中版本控制下的所有文件,那么您可以尝试:

git ls-tree -r -z master --name-only | xargs -0 git rm

管道之前的命令的第一部分递归地查找 master 中的所有版本化文件,并且 git rm 从远程存储库中删除每个文件。

git rm <file> 删除远程存储库跟踪的文件。

您可以将空树与工作树更新合并:

git read-tree -m -u $(git mktree < /dev/null)