关于git:如何完成恢复提交,以及如何恢复大量提交

how to finish reverting a commit, and how to revert a lot of commits

这一定很简单,但我在git-scm中找不到。

我为一个公共项目做了很多小的承诺,我所有的工作都很糟糕。我想把我所做的一切都删除。一些是我刚在本地承诺的,一些是我推到"原始主人"的。

第一个承诺(一周前)是bdbad86…最近一次是e82401b

我只想把这些都带走。我试过恢复一个。

1
2
3
4
5
git status  
# On branch master  
# You are currently reverting commit e82401b.  
#   (all conflicts fixed: run"git revert --continue")  
#   (use"git revert --abort" to cancel the revert operation)
  • 我不知道如何完成这一还原。
  • 我不想每一个任务都要单独完成,我想把它们都吹走。

  • 我在这里假设在您的工作之间没有其他人插话承诺,并且您的错误承诺在repo的历史中形成了一个连续的范围。否则你会变得更复杂。假设您的历史如下:

    1
    2
    3
    4
    5
    6
    7
    e82401b - (master, HEAD) My most recent private commit
    ...
    bc2da37 - My first private commit
    cf3a183 - (origin/master) My most recent bad public commit
    ...
    292acf1 - My first bad public commit
    82edb2a - The last good public commit

    我们要做的第一件事就是把你还没有公开的承诺吹走。您可以使用以下命令执行此操作(请注意,您的更改将不存在,并且应被视为不可恢复):

    1
    git reset --hard cf3a183

    等效(且可读性更强):

    1
    git reset--hard origin/master

    现在,您对存储库的视图与origin/master中的视图一致。现在,您希望还原不正确的公共更改,并将其作为还原提交进行发布。这些指令用于创建单个还原提交。

    您可以使用git revert --no-commit a..b来恢复从a之后的提交开始的所有提交(注意!)并于(包括)承诺第十一条第(三)项。恢复将为您准备提交。所以,在这里,我们要做的是:

    1
    git revert --no-commit 82edb2a..HEAD

    或者,等价地:

    1
    git revert --no-commit 292acf1^..HEAD

    记住,HEAD现在指向与origin/master相同的位置。

    运行revert命令之后,您现在已经准备好了更改并准备提交,所以只需运行一个简单的git commit -m"Reverting those bad changes I accidentally pushed and made public"


    您可以对以前的任何提交设置回购,之后的所有更改都将被删除。

    Git重置--硬

    之后,使用git push——强制原点将其推到github

    访问如何将Git存储库回滚(重置)到特定提交?