【问题标题】:Reset all changes after last commit in git在 git 中最后一次提交后重置所有更改
【发布时间】:2011-06-05 13:03:19
【问题描述】:

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

【问题讨论】:

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

标签: git git-commit git-reset git-revert


【解决方案1】:

首先,重置所有更改

这将撤消您对跟踪文件所做的任何更改并恢复已删除的文件:

git reset HEAD --hard

其次,删除新文件

这将删除自上次提交以来添加的所有新文件:

git clean -fd

由于.gitignore 而未跟踪的文件被保留;他们不会被删除

警告:使用-x 而不是-fd 删除被忽略的文件。你可能不想这样做。

【讨论】:

  • @Adam:您有时可能还希望将-x 选项设置为git clean,这会指示它也删除被忽略的文件。
  • 如果您想保留由于 .gitignore 而无法跟踪的文件,请小心使用 git clean -fd 命令。
  • @Levinaris:反之,git clean -fd 不会删除被忽略的文件。 -x 将。
  • @RobertSiemer 实际上,它可以!如果您有任何完全由被忽略文件组成的文件夹,它将删除这些文件夹,从而删除被忽略的文件。考虑一个像这里这样的 .gitignore 文件:stackoverflow.com/q/25554504/456645。在此示例中,假设某些文件夹没有 PHP 文件。 git clean -fd 将删除这些文件夹和未跟踪的文件。使用 git 版本 1.9.1 测试
  • 但是为什么需要第二次“清理”呢?
【解决方案2】:

有两个命令可以在这种情况下工作,

root>git reset --hard HEAD~1

root>git push -f

更多 git 命令请参考page

【讨论】:

  • git push -f 与问题无关,在这种情况下很危险
  • 这将从远程存储库中删除最后一次提交,而不是删除所有更改最后一次提交。
【解决方案3】:

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

  1. 您可以通过以下方式撤消对跟踪文件的更改:

    git reset HEAD --hard
    
  2. 您可以通过以下方式删除未跟踪的文件:

    git clean -f
    
  3. 您可以通过以下方式删除未跟踪的文件和目录:

    git clean -fd
    

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

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

    git clean -fdx
    

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

您也可以将clean.requireForce 设置为false

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

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

【讨论】:

  • 太棒了,正是我需要的。感谢所有相关命令的比较!
猜你喜欢
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2015-01-16
  • 2011-02-20
  • 2021-06-08
  • 2021-08-12
相关资源
最近更新 更多