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

Dog*_*ert 305 git git-revert git-reset git-commit

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

Ben*_*ier 525

首先重置更改

git reset HEAD --hard
Run Code Online (Sandbox Code Playgroud)

然后清除所有未跟踪的东西.如果要保留未跟踪的文件,请.gitignore注意此命令.

git clean -fd
Run Code Online (Sandbox Code Playgroud)

  • 如果你想保留因.gitignore而没有跟踪的文件,请注意`git clean -fd`命令. (27认同)
  • @Adam:您有时也可能希望`-x`选项为`git clean`,它也会指示它删除被忽略的文件. (7认同)
  • @RobertSiemer实际上,它可以!如果您有任何文件夹完全由忽略文件组成,它将删除这些文件夹,从而删除被忽略的文件.考虑一个.gitignore文件,如下所示:http://stackoverflow.com/q/25554504/456645.在此示例中,假设某些文件夹没有PHP文件.`git clean -fd`将删除那些文件夹和未跟踪的文件.用git版本1.9.1测试 (5认同)
  • @Levinaris:这是另一种方式`git clean -fd`不会删除被忽略的文件.`-x`会. (3认同)
  • 但为什么需要第二次“清理”呢? (3认同)
  • @RobertSiemer我在丢失被忽略的文件后读到了这个回复 (2认同)
  • 我不赞成这个答案,因为它在 444 上并且看起来很酷。 (2认同)

Ort*_*kni 61

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

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

    git reset HEAD --hard
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您可以删除未跟踪的文件:

    git clean -f
    
    Run Code Online (Sandbox Code Playgroud)
  3. 您可以使用以下命令删除未跟踪的文件和目录:

    git clean -fd
    
    Run Code Online (Sandbox Code Playgroud)

    您无法撤消对未跟踪文件的更改.

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

    git clean -fdx
    
    Run Code Online (Sandbox Code Playgroud)

    您无法撤消对忽略文件的更改.

您还可以设置clean.requireForcefalse:

git config --global --add clean.requireForce false
Run Code Online (Sandbox Code Playgroud)

避免在使用时使用-f(--force)git clean.

  • 太棒了,正是我需要的.感谢您对所有相关命令的比较! (2认同)