如何彻底清理git工作目录?

时间:2011-01-14 11:55:03

标签: git mercurial

在mercurial中,我习惯于能够hg up 00完全清理工作目录。

这会在执行hg init后立即将工作目录重置为其状态。

git中有没有等效的内容?

请注意,hg up 00hg up 0不同,hg up null更新为已提交的第一个修订版,而是等同于rm -rf *,只需要输入几个字符。 * 8' )

另请注意,我不想只在git工作目录的根目录中执行git status,因为git会将所有文件显示为已删除。我只想在第一次提交之前将存储库更新到它的状态。我的网络搜索和git手册没有向我提供我需要的信息,以便在{{1}}中找到解决方法。

作为背景,我想保留存储库,以便我以后可以轻松签出不同的提交。我想这样做的一个原因是我有一个非常大的存储库(实际上是一个git svn repo)而且我不想再次重新克隆它(它需要几天才能完成而你不是应该克隆一个gitsvn repo)。我确实希望能够在我不需要的时候释放工作副本占用的空间。

3 个答案:

答案 0 :(得分:2)

这似乎是一件不寻常的事情,git branches以一个通常非空的初始提交开始。在使用常规git命令进行初始提交之前,您不能“检出”或“重置”。

您可以使用此命令将当前结帐分支重置为“未创建”状态,以便进行新的初始提交。

git updated-ref -d "$(git symbolic-ref HEAD)"

这会删除当前签出的分支。

然后,您可以使用此命令从索引中删除所有文件(假设您位于存储库的根目录下)。

git rm -r --cached .

如果您有未分期更改,则可能需要-f切换。

最后,您可以使用此命令清除工作树中的所有文件。 警告:有潜在危险

git clean -fd # WARNING, dangerous

答案 1 :(得分:2)

null修订的等价物在git中称为裸存储库。  This search对该主题进行了粗略概述,可以找到将非裸转换为裸回购的不同方式here

与hg不同,没有简单的方法可以在裸存储库和非裸存储库之间切换。此外,您不应该进入非裸存储库,因为推送将更改git的索引,但不会更新工作树。有关详细信息,请参阅Working with git from 2 laptops with no bare repo

答案 2 :(得分:1)

这些是我想到的解决方案:

1-您可以从工作目录中删除.git目录,并且您的工作目录中将没有git存储库。

2-您可以通过发出以下命令重置为初始提交(初始提交仍将保留):

git reset --hard `git rev-list HEAD | tail -n 1`