如何清除Git中的工作目录?
当前回答
将特定文件重置为最后提交状态(丢弃特定文件中未提交的更改):
git checkout thefiletoreset.txt
git状态输出中提到了这一点:
(use "git checkout -- <file>..." to discard changes in working directory)
重置整个存储库到上次提交的状态:
git reset --hard
为了删除未跟踪的文件,我通常只删除工作副本中的所有文件(但不包括.git/文件夹!),然后进行git重置——这很难,只留下已提交的文件。
更好的方法是使用git clean(警告:使用-x标志会导致git删除被忽略的文件):
git clean -d -x -f
将删除未跟踪的文件,包括目录(-d)和被git忽略的文件(-x)。将-f参数替换为-n以执行演练或-i用于交互模式,它将告诉您将删除什么。
相关链接:
Git-reset手册页 Git-clean手册页 git准备好“清理未跟踪的文件”(正如Marko张贴的) 堆栈溢出问题“如何从当前Git工作树中删除本地(未跟踪的)文件”
其他回答
您可以创建一个包含空工作副本的提交。
这通常是一种安全的、非破坏性的方法,因为它不涉及使用任何暴力重置机制。首先用git签出空隐藏所有托管内容,然后可以手动检查和删除剩余的非托管内容。
## 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工作树子文件夹下删除根目录。
要切换到另一个分支,丢弃所有未提交的更改(例如,由于Git对行结束符的奇怪处理而导致的):
git checkout -f <branchname>
我有一个工作副本,有数百个更改过的文件(但空git diff——ignore-space-at-eol),我无法用我在这里读的任何命令摆脱,git checkout <branchname>也不会工作,除非给出-f(或——force)选项。
到目前为止,所有答案都保留了本地提交。如果你真的很认真,你可以放弃所有的本地提交和所有的本地编辑:
git reset --hard origin/branchname
例如:
git reset --hard origin/master
这使得您的本地存储库完全匹配原始文件的状态(不包括未跟踪的文件)。
如果你只是在阅读命令后不小心这样做了,而不是它所做的:),使用git reflog来查找旧的提交。
将特定文件重置为最后提交状态(丢弃特定文件中未提交的更改):
git checkout thefiletoreset.txt
git状态输出中提到了这一点:
(use "git checkout -- <file>..." to discard changes in working directory)
重置整个存储库到上次提交的状态:
git reset --hard
为了删除未跟踪的文件,我通常只删除工作副本中的所有文件(但不包括.git/文件夹!),然后进行git重置——这很难,只留下已提交的文件。
更好的方法是使用git clean(警告:使用-x标志会导致git删除被忽略的文件):
git clean -d -x -f
将删除未跟踪的文件,包括目录(-d)和被git忽略的文件(-x)。将-f参数替换为-n以执行演练或-i用于交互模式,它将告诉您将删除什么。
相关链接:
Git-reset手册页 Git-clean手册页 git准备好“清理未跟踪的文件”(正如Marko张贴的) 堆栈溢出问题“如何从当前Git工作树中删除本地(未跟踪的)文件”
Use:
git clean -df
虽然宣传得不好,但git clean真的很方便。Git Ready对Git clean有一个很好的介绍。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别