在git中最后一次提交后重置所有更改


324

在上一次提交之后,如何撤消对目录的所有更改,包括删除添加的文件,重置修改​​的文件以及重新添加删除的文件?



8
@nawfal可能是重复的,但与相应的“如何还原git存储库”相比,“在最后一次提交后重置所有更改”匹配的搜索条件(在Google中搜索的单词)更多。至少对于像我这样不以英语为母语的人:d
Shirish Herwade

Answers:


561

首先重置更改

git reset HEAD --hard

然后清理所有未跟踪的内容。如果要保留由于未能跟踪的文件,请.gitignore谨慎使用此命令。

git clean -fd

7
@Adam:有时您可能还需要该-x选项,该选项git clean也将其指示为删除忽略的文件。
卡斯卡贝尔2011年

31
如果要保留由于.gitignore而无法跟踪的文件,请谨慎使用该git clean -fd命令。
bitsoflogic 2014年

3
@Levinaris:这是另一种方法,git clean -fd不会删除被忽略的文件。-x将。
罗伯·西默

5
@RobertSiemer实际上,可以!如果您有完全由忽略文件组成的文件夹,它将删除那些文件夹,从而删除忽略的文件。考虑一个.gitignore文件,就像这里的文件:stackoverflow.com/q/25554504/456645。在此示例中,假定某些文件夹没有PHP文件。 git clean -fd将删除这些文件夹和未跟踪的文件。使用git版本1.9.1测试
bitsoflogic 2015年

3
但是为什么根本需要第二次“清理”呢?
Shirish Herwade '17

71

在上一次提交之后,如何撤消对目录的所有更改,包括删除添加的文件,重置已修改的文件以及重新添加删除的文件?

  1. 您可以使用以下方法撤消对跟踪文件的更改:

    git reset HEAD --hard
    
  2. 您可以使用以下方法删除未跟踪的文件:

    git clean -f
    
  3. 您可以使用以下方法删除未跟踪的文件和目录:

    git clean -fd
    

    您不能撤消对未跟踪文件的更改

  4. 您可以删除忽略和未跟踪的文件和目录

    git clean -fdx
    

    您不能撤消对被忽略文件的更改

您还可以设置clean.requireForcefalse

git config --global --add clean.requireForce false

避免在使用时使用-f--forcegit clean


2
太棒了,正是我所需要的。感谢您对所有相关命令的比较!
字幕

-1

在这种情况下,有两个命令可以使用,

root> git reset --hard HEAD〜1

根> git push -f

有关更多git命令的信息,请参阅此页面


1
git push -f与问题无关,在这种情况下很危险
mustache1up
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.