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


How do I clear my local working directory in git?

本问题已经有最佳答案,请猛点这里访问。

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


要将特定文件重置为上次提交状态(要放弃特定文件中的未提交更改),请执行以下操作:

1
git checkout thefiletoreset.txt

这在git status输出中提到:

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

要将整个存储库重置为上次提交的状态,请执行以下操作:

1
git reset --hard

要删除未跟踪的文件,我通常只删除工作副本中的所有文件(但不删除.git/文件夹!),然后执行git reset --hard,只留下提交的文件。

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

1
git clean -d -x -f

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

相关链接:

  • Git重置手册页
  • Git清洁手册页
  • Git Ready"清理未跟踪的文件"(如Marko发布的那样)
  • stackoverflow问题"如何从Git工作副本中删除未跟踪的文件?"


1
git clean -df

编辑:它的广告不怎么好,但git clean真的很方便。Git Ready对git clean有一个很好的介绍。

Update: removed the x flag based on the suggestion in the comment below


到目前为止,所有答案都保留了当地的承诺。如果您是认真的,可以通过执行以下操作放弃所有本地提交和所有本地编辑:

1
git reset --hard origin/branchname

例如:

1
git reset --hard origin/master

这使您的本地存储库完全匹配源站的状态(而不是未跟踪的文件)。

如果您只是在读取命令后意外地执行了此操作,而不是执行的操作:),请使用git reflog查找旧的提交。


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

这是一种通常安全的、非破坏性的方法,因为它不涉及使用任何蛮力重置机制。首先使用git checkout empty隐藏所有托管内容,然后可以自由地手动查看和删除任何未托管内容。

1
2
3
4
5
## 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文件夹本身。

要重新填充工作副本…

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

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

1
2
3
4
git init
git commit --allow-empty --allow-empty-message -m""
git tag empty
...

标记的空工作树有多种用途。目前我最喜欢的是在一组git worktree子文件夹下对根进行去填充。


要切换到另一个分支,请放弃所有未提交的更改(例如,由于Git对行尾的奇怪处理而导致的更改):

1
git checkout -f <branchname>

我有一份工作副本,里面有数百个更改过的文件(但是清空了git diff --ignore-space-at-eol),我不能用我在这里读到的任何命令删除这些文件,而且git checkout 也不能工作,除非有-f--force选项。


要按Git状态建议重置特定文件,请执行以下操作:

1
git checkout <filename>

重置文件夹

1
git checkout <foldername>/*