【发布时间】:2020-02-25 02:51:22
【问题描述】:
我已经做了 20 次提交,现在由于不兼容问题而破坏了我的代码,现在我想将其恢复为该提交。 我被困在了
重置并恢复
命令。谁能告诉我如何将其恢复为旧提交。由于我只在一个分支上工作,因此我已将所有更改推送到主分支。
【问题讨论】:
标签: git git-commit git-reset git-revert
我已经做了 20 次提交,现在由于不兼容问题而破坏了我的代码,现在我想将其恢复为该提交。 我被困在了
重置并恢复
命令。谁能告诉我如何将其恢复为旧提交。由于我只在一个分支上工作,因此我已将所有更改推送到主分支。
【问题讨论】:
标签: git git-commit git-reset git-revert
如果这是您的个人项目,即在此期间没有其他人从 master 中撤出,我建议您重置或变基而不是恢复(因此会创建新的提交)。
如果您不关心这 20 次提交所引入的内容,而只想摆脱这些内容(这就是我对您问题的理解),那么我会选择
git reset --hard HEAD~21
然后是git push -f origin master。
如果您确实关心这些提交中的 19 个,并且您确定它们引入的更改与“破坏一切”的更改完全无关,我会选择
git rebase --interactive HEAD~21
这将列出所有 20 个提交。
将“有罪”提交前的 pick 更改为 drop 并保存。这将从历史记录中删除该提交。
处理合并冲突(如果有)并继续进行变基。
一切完成后,您将需要强制推送,因为这也会更改分支历史记录。
【讨论】:
只需git revert HEAD~3,其中 3 是要恢复的提交数
【讨论】:
也类似于check this 和check 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
git revert HEAD~20
将一一还原最近的 20 次提交。
但是,您可能只需要一次还原提交,所以这样做
git revert --no-commit HEAD~20..
获得一个还原提交,然后将还原 20 个最后的提交,并且
git commit
提交所说的revert commit。然后你可以推动。
【讨论】: