如何用Git将代码恢复到历史版本

有时,在一些特殊情况下,我们需要将代码恢复到历史提交版本。而且这个历史提交版本距离最近一次提交已经比较久了。

比如我希望把下面的仓库提交恢复到之前的提交。当然我可以一次又一次的还原,但是有没有更快更简单的方法呢?

暴力方式

如果你的仓库是自己用的(不影响别人),那么你可以用gitreset-hard

对于刚才的例子,需要执行的命令是:

//将当前分支备份到backup_commit。

git标签备份_提交

git推送原始备份_提交

//重置源分支

git重置-硬23801b2

//强制推送以更新远程分支

git推送原始源-f

温和的方式

如果你的仓库里有很多人协作,你会很混乱的使用别人的本地代码库,那么你只能新建一个提交,在这个提交里你要取消的所有提交都是反向的,那么具体应该怎么做呢?该方法如下:

首先,和前面一样,使用gitreset-hard23801b2将代码切换到目标提交的id。接下来,使用gitreset-softorigin/source命令将当前代码切换回最新提交的代码。

在执行了上面两个步骤之后,您的仓库仍然是最新的提交,但是工作区已经变成了历史提交。这时可以使用git add和git commit。最终效果如下:

但是看了钱的提醒,这个方法需要保证重置时没有人重置进行新的提交,如果有,其他人的提交也会被撤销。所以还是挺危险的。慎用。

虽然很少用到,但是了解它的原理有助于你理解Git的工作区、临时存储区、版本库中各种指针操作的意义,希望对你有用。