如何清除Git中的工作目录?


当前回答

到目前为止,所有答案都保留了本地提交。如果你真的很认真,你可以放弃所有的本地提交和所有的本地编辑:

git reset --hard origin/branchname

例如:

git reset --hard origin/master

这使得您的本地存储库完全匹配原始文件的状态(不包括未跟踪的文件)。

如果你只是在阅读命令后不小心这样做了,而不是它所做的:),使用git reflog来查找旧的提交。

其他回答

按git状态重置指定文件:

git checkout <filename>

重置文件夹

git checkout <foldername>/*

到目前为止,所有答案都保留了本地提交。如果你真的很认真,你可以放弃所有的本地提交和所有的本地编辑:

git reset --hard origin/branchname

例如:

git reset --hard origin/master

这使得您的本地存储库完全匹配原始文件的状态(不包括未跟踪的文件)。

如果你只是在阅读命令后不小心这样做了,而不是它所做的:),使用git reflog来查找旧的提交。

Use:

git clean -df

虽然宣传得不好,但git clean真的很方便。Git Ready对Git clean有一个很好的介绍。

您可以创建一个包含空工作副本的提交。

这通常是一种安全的、非破坏性的方法,因为它不涉及使用任何暴力重置机制。首先用git签出空隐藏所有托管内容,然后可以手动检查和删除剩余的非托管内容。

## create a stand-alone, tagged, empty commit
true | git mktree | xargs git commit-tree | xargs git tag empty

## clear the working copy
git checkout empty

您的工作副本现在应该没有任何托管内容。剩下的就是非托管文件和.git文件夹本身。

要重新填充工作副本…

git checkout master ## or whatever branch you will be using

如果你是一个有远见的人,你可能会以一个初始的空提交为基础来开始你的存储库……

git init
git commit --allow-empty --allow-empty-message -m ""
git tag empty
...

有标记的空工作树有多种用途。目前我最喜欢的方法是在一组git工作树子文件夹下删除根目录。

将特定文件重置为最后提交状态(丢弃特定文件中未提交的更改):

git checkout thefiletoreset.txt

git状态输出中提到了这一点:

(use "git checkout -- <file>..." to discard changes in working directory)

重置整个存储库到上次提交的状态:

git reset --hard

为了删除未跟踪的文件,我通常只删除工作副本中的所有文件(但不包括.git/文件夹!),然后进行git重置——这很难,只留下已提交的文件。

更好的方法是使用git clean(警告:使用-x标志会导致git删除被忽略的文件):

git clean -d -x -f

将删除未跟踪的文件,包括目录(-d)和被git忽略的文件(-x)。将-f参数替换为-n以执行演练或-i用于交互模式,它将告诉您将删除什么。

相关链接:

Git-reset手册页 Git-clean手册页 git准备好“清理未跟踪的文件”(正如Marko张贴的) 堆栈溢出问题“如何从当前Git工作树中删除本地(未跟踪的)文件”