如何在git中清除我的工作目录?
答案 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>/*