Git revert commit - 如何将 Git 仓库恢复到之前的提交?

Git revert multiple commits / git / git-checkout / git-reset / git-revert

如何从当前状态恢复到某次提交时的快照?

$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <me@me.com>
Date:   Thu Nov 4 18:59:41 2010 -0400

blah blah blah...

commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <me@me.com>
Date:   Thu Nov 4 05:13:39 2010 -0400

more blah blah blah...

commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <me@me.com>
Date:   Thu Nov 4 00:55:06 2010 -0400

And yet more blah blah...

commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <me@me.com>
Date:   Wed Nov 3 23:56:08 2010 -0400

Yep, more blah blah.

Paolo



Answer #1
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x是要返回的提交数

这时你可以创建一个分支,并从此时开始工作。

#检出给定的提交。
#这样做会导致`HEAD分离,这意味着`HEAD`
#没有指向最新版本,因此您需要检出分支
#为了能够更新代码。
git checkout <commit-id>

#创建一个分支到给定提交的新分支
git checkout -b <branch name>
git reflog
git checkout HEAD@{...}

将您的头“移动”回所需的提交。

#这将破坏任何本地修改。
#如果您要​​保留未完成的工作,请不要这样做。
git reset --hard 0d1d7fc32

#或者,如果有工作要做:
git stash
git reset --hard 0d1d7fc32
git stash pop
#这样可以保存修改,然后在重置后重新应用该补丁。
#如果您修改了原本可能会导致合并冲突的内容
#自您重置为提交以来已更改。