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

我怎样才能清除我的工作目录在git?

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

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参数replace为-n来执行干运行或-i交互模式,它会告诉你什么将被删除。

相关链接:

  • git-reset手册页
  • git-clean手册页
  • git准备好“清除未跟踪的文件” (正如Marko所发布的)
  • Stackoverflow的问题“你如何从你的git工作副本中删除未跟踪的文件?
 git clean -df 

编辑:这不是广告,但git clean是非常方便的。 Git Ready有一个很好的介绍git clean

更新:根据下面评论中的build议删除了x标志

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

 git reset --hard origin/branchname 

例如:

 git reset --hard origin/master 

这使得您的本地存储库原始状态完全匹配 (除了未跟踪的文件之外)。

如果你在阅读命令后不小心做到了这一点,而不是它做了什么:),使用git reflog来find你的旧提交。

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

这是一种普遍安全的非破坏性方法,因为它不涉及使用任何暴力重置机制。 首先,您将所有托pipe内容都用git checkout empty隐藏起来,然后您可以自由手动审查并删除所有未被pipe理的内容。

 ## create and initialize a temporary repo with an empty working copy ( mkdir ./temp-repo && cd ./temp-repo && git init touch ./temp-file && git add . && git commit -m "almost empty" git rm ./temp-file && git commit -m "empty" git tag empty ) ## fetch the history from the temporary repo git remote add empty ./temp-repo && git fetch --tags empty && git remote rm empty gvfs-trash ./temp-repo ## delete the temporary repo ## clear the working copy git checkout empty 

您的工作副本现在应该清除任何托pipe内容。 剩下的都是非托pipe文件和.git文件夹本身。

重新填充您的工作副本…

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

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

 git checkout -f <branchname> 

我有一个工作副本,有数百个已更改的文件(但空的git diff --ignore-space-at-eol ),我无法使用我在这里读取的任何命令将其清除,而git checkout <branchname> won'工作,要么 – 除非给予-f (或--force )选项。

按照git status的build议重置一个特定的文件:

 git checkout <filename> 

重置文件夹

 git checkout <foldername>/*