【问题标题】:Reversing the git to the previous commit将 git 反转到上一个提交
【发布时间】:2020-02-25 02:51:22
【问题描述】:

我已经做了 20 次提交,现在由于不兼容问题而破坏了我的代码,现在我想将其恢复为该提交。 我被困在了

重置并恢复

命令。谁能告诉我如何将其恢复为旧提交。由于我只在一个分支上工作,因此我已将所有更改推送到主分支。

【问题讨论】:

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


【解决方案1】:

如果这是您的个人项目,即在此期间没有其他人从 master 中撤出,我建议您重置或变基而不是恢复(因此会创建新的提交)。

如果您不关心这 20 次提交所引入的内容,而只想摆脱这些内容(这就是我对您问题的理解),那么我会选择

git reset --hard HEAD~21

然后是git push -f origin master

如果您确实关心这些提交中的 19 个,并且您确定它们引入的更改与“破坏一切”的更改完全无关,我会选择

git rebase --interactive HEAD~21

这将列出所有 20 个提交。 将“有罪”提交前的 pick 更改为 drop 并保存。这将从历史记录中删除该提交。 处理合并冲突(如果有)并继续进行变基。 一切完成后,您将需要强制推送,因为这也会更改分支历史记录。

【讨论】:

    【解决方案2】:

    只需git revert HEAD~3,其中 3 是要恢复的提交数

    【讨论】:

      【解决方案3】:

      也类似于check thischeck this。您可以通过检查提交消息来签出较旧的提交。 例如:

      $ git hist
      * fa3c141 2011-03-09 | Added HTML header (HEAD, master) [Alexander Shvets]
      * 8c32287 2011-03-09 | Added standard HTML page tags [Alexander Shvets]
      * 43628f7 2011-03-09 | Added h1 tag [Alexander Shvets]
      * 911e8c9 2011-03-09 | First Commit [Alexander Shvets]
      

      结帐

      git checkout <hash>
      

      git revert <commit hash>
      

      在推送之前,您需要解决冲突。为此,您需要恢复或签出到您的特定提交,并且“git pull origin master”会将您的本地存储库与远程分支同步。它将创建一组您需要手动解决的冲突。那么只有您可以推送更改,因为它现在是同步的。否则,master 将始终领先于您在本地的旧提交。

      【讨论】:

      • 但签出不允许我将更改推送到原点。它说更新被拒绝,因为推送的分支提示在其遥控器后面
      • 如果你是唯一一个在这个项目上工作的人(没有其他人从主人那里拉出来)那么你可以做一个强制推送。 git push -f origin master
      【解决方案4】:
      git revert HEAD~20
      

      将一一还原最近的 20 次提交。

      但是,您可能只需要一次还原提交,所以这样做

      git revert --no-commit HEAD~20..
      

      获得一个还原提交,然后将还原 20 个最后的提交,并且

      git commit
      

      提交所说的revert commit。然后你可以推动。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 2013-03-31
        • 2015-08-06
        • 1970-01-01
        • 1970-01-01
        • 2011-10-16
        • 2019-01-04
        相关资源
        最近更新 更多