如何在Git中清除我的工作目录?
用途:
git clean -df
它没有很好的宣传,但是git clean真的很方便。git就绪有一个不错的介绍git clean。
git clean
将特定文件重置为上次提交状态(丢弃特定文件中未提交的更改):
git checkout thefiletoreset.txt
这在git status输出中提到:
git status
(use "git checkout -- <file>..." to discard changes in working directory)
要将整个存储库重置为最后提交的状态:
git reset --hard
要删除未跟踪的文件,我通常只是删除工作副本中的所有文件(但没有.git/文件夹!),然后执行git reset --hard,只留下已提交的文件。
.git/
更好的方法是使用git clean(警告:使用-x标志如下将导致Git删除忽略的文件):
-x
git clean -d -x -f
将删除未跟踪的文件,包括目录(-d)和被git忽略的文件(-x)。将-f参数替换为-n以执行试运行或将-i替换为交互模式,它会告诉您将删除的内容。
-d
-f
-n
-i
相关链接:
到目前为止,所有答案都保留本地提交。如果你是真的认真的,你可以通过执行以下操作丢弃所有本地提交和所有本地编辑:
git reset --hard origin/branchname
例如:
git reset --hard origin/master
这使您的本地存储库完全匹配成为源的状态(未跟踪的文件除外)。
如果您在阅读命令后意外执行此操作,而不是它的作用:),请使用git reflg查找您的旧提交。
您可以创建一个包含空工作副本的提交。
这是一种通常安全的非破坏性方法,因为它不涉及使用任何暴力重置机制。首先,你可以使用git checkout empty隐藏所有托管内容,然后你可以自由地手动查看和删除剩余的任何非托管内容。
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
要重新填充您的工作副本…
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 worktree
要按照git状态建议重置特定文件:
git checkout <filename>
重置文件夹
git checkout <foldername>/*
要切换到另一个分支,丢弃所有未提交的更改(例如,由于Git对行结尾的奇怪处理而导致):
git checkout -f <branchname>
我有一个工作副本,其中包含数百个更改的文件(但空的git diff --ignore-space-at-eol),我无法用我在这里阅读的任何命令摆脱这些文件,并且git checkout <branchname>也不会工作-除非给出-f(或--force)选项。
git diff --ignore-space-at-eol
git checkout <branchname>
--force