dbr*_*dbr 1049
要将特定文件重置为上次提交状态(以丢弃特定文件中未提交的更改):
git checkout thefiletoreset.txt
Run Code Online (Sandbox Code Playgroud)
这在git status输出中提到:
(use "git checkout -- <file>..." to discard changes in working directory)
Run Code Online (Sandbox Code Playgroud)
要将整个存储库重置为上次提交的状态:
git reset --hard
Run Code Online (Sandbox Code Playgroud)
要删除未跟踪档案,我通常只是删除工作副本中的所有文件(但不是在.git/文件夹!),然后执行git reset --hard它只有提交的文件离开它.
更好的方法是使用git clean:( 警告:使用-x下面的标志将导致git删除被忽略的文件.)
git clean -d -x -f
Run Code Online (Sandbox Code Playgroud)
将删除未跟踪的文件,包括-dgit(-x)忽略的目录()和文件.将-f参数替换-n为执行干运行或-i交互模式,它将告诉您将删除的内容.
相关链接:
Mar*_*rko 138
git clean -df
Run Code Online (Sandbox Code Playgroud)
编辑:
它没有很好的广告,但git clean非常方便.Git Ready有一个很好的介绍git clean.
更新:
git clean根据以下评论中的建议删除了标记
dbn*_*dbn 43
到目前为止,所有答案都保留了本地提交.如果您真的很认真,可以通过以下方式丢弃所有本地提交和所有本地编辑:
git reset --hard origin/branchname
Run Code Online (Sandbox Code Playgroud)
例如:
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
这使您的本地存储库与原始状态(未跟踪文件除外)完全匹配.
如果您在阅读完命令之后意外地执行了此操作,而不是它的操作:),请使用git reflog查找旧提交.
nob*_*bar 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
Run Code Online (Sandbox Code Playgroud)
您的工作副本现在应该清除任何托管内容.剩下的就是非托管文件和.git文件夹本身.
要重新填充您的工作副本......
git checkout master ## or whatever branch you will be using
Run Code Online (Sandbox Code Playgroud)
如果你是一个具有前瞻性思维的人,你可以通过将所有内容都放在最初的空提交中来启动你的知识库.
git init
git commit --allow-empty --allow-empty-message -m ""
git tag empty
...
Run Code Online (Sandbox Code Playgroud)
标记的空工作树有各种用途.我最喜欢的是在一组git worktree子文件夹下减少根.
要切换到另一个分支,丢弃所有未提交的更改(例如,由Git奇怪处理行结尾):
git checkout -f <branchname>
Run Code Online (Sandbox Code Playgroud)
我有一个包含数百个已更改文件(但是空的git diff --ignore-space-at-eol)的工作副本,我无法用我在这里阅读的任何命令消除这些文件,并且git checkout <branchname>除非给出-f(或--force)选项,否则将无法工作.