git:删除所有跟踪的文件?

git:删除所有跟踪的文件?

我有一个目录,其中包含一个 git repo 以及其他我不想跟踪的不相关文件(这是我的主目录,如果这是不好的做法,请见谅 - 欢迎对 bash 配置文件和 vim 文件版本控制提出其他建议!)

我可以轻松删除 .git 目录,但这样我的目录中就会保留所有跟踪的文件。如何删除所有跟踪的文件,以便可以完全删除 git repo 及其相关文件,有效地“取消克隆”或“卸载”?

此外,删除这些文件后,如何删除曾经包含跟踪文件但现在为空的目录?

相关(反问):Git:如何删除所有未跟踪的文件

答案1

对于文件,你可能需要将命令行稍微更改为 git-rm 页面上建议的命令行

git ls-files -z | xargs -0 rm -f

对于更复杂的文件路径,这种方法更安全。对于目录,您可以尝试类似的策略:

git ls-tree --name-only -d -r -z HEAD | sort -rz | xargs -0 rmdir 

但是,这取决于您希望如何处理包含未跟踪文件(通常被 gitignored)的目录。上面的命令行应该保留这些文件及其目录。

但无论内容是什么,都很容易改变这一点以删除目录。

答案2

你可以使用 向 git 请求所有跟踪文件的列表git ls-files。因此,以下命令应该可以正常工作

git ls-files | xargs rm

答案3

为了更有效地做到这一点,

git read-tree -u --reset $(:|git mktree)

或者纯度点,

git read-tree -u --reset $(git hash-object -t tree /dev/null)

甚至

git read-tree -u --reset 4b825dc642cb6eb9a060e54bf8d69288fbee4904

其中任何一个都会清除所有跟踪的文件和所有沿途清空的目录。

相关内容