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

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

700344 次浏览

用途:

git clean -df

它没有很好的宣传,但是git clean真的很方便。git就绪有一个不错的介绍git clean

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

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替换为交互模式,它会告诉您将删除的内容。

相关链接:

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

git reset --hard origin/branchname

例如:

git reset --hard origin/master

这使您的本地存储库完全匹配成为源的状态(未跟踪的文件除外)。

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

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

这是一种通常安全的非破坏性方法,因为它不涉及使用任何暴力重置机制。首先,你可以使用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子文件夹下减少根。

要按照git状态建议重置特定文件:

git checkout <filename>

重置文件夹

git checkout <foldername>/*

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

git checkout -f <branchname>

我有一个工作副本,其中包含数百个更改的文件(但空的git diff --ignore-space-at-eol),我无法用我在这里阅读的任何命令摆脱这些文件,并且git checkout <branchname>也不会工作-除非给出-f(或--force)选项。