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

时间:2009-03-23 13:43:19

标签: git

如何在git中清除我的工作目录?

5 个答案:

答案 0 :(得分:1016)

要将特定文件重置为上次提交状态(以丢弃特定文件中未提交的更改):

git checkout thefiletoreset.txt

git status输出中提到了这一点:

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

要将整个存储库重置为上次提交状态:

git reset --hard

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

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

git clean -d -x -f

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

相关链接:

答案 1 :(得分:135)

git clean -df

修改 它没有得到很好的宣传,但git clean非常方便。 Git Ready有nice intro to git clean

  

更新:根据以下评论中的建议删除了x标记

答案 2 :(得分:11)

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

这是一种通常安全,非破坏性的方法,因为它不涉及使用任何强力复位机制。首先,您使用git checkout empty隐藏所有托管内容,然后您可以手动审核并删除任何未管理的内容。

## 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 worktree子文件夹下减少根目录。

答案 3 :(得分:9)

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

git checkout -f <branchname>

我有一份包含数百个已更改文件的工作副本(但是空git diff --ignore-space-at-eol),我无法使用此处读取的任何命令将其删除,并且git checkout <branchname>将无效,要么 - 除非给出-f(或--force)选项。

答案 4 :(得分:2)

根据git status建议重置特定文件:

git checkout <filename>

重置文件夹

git checkout <foldername>/*