跳到主要内容

Git 版本回退

在实际开发中,有时候我们可能需要将项目版本回退到某个版本,例如发现某些提交存在 Bug 等情况。在 Git 版本管理系统中,当然支持版本的回退(回滚),而且是相对比较简单、方便的操作。

本文将演示在 Git 仓库中,如何使用 reset 和 revert 命令回退到某个版本(提交),并且让远程分支也回退到历史版本。

使用 git reset 命令

首先克隆一个 HelloRepo 仓库:

git clone https://github.com/luhuadong/HelloRepo.git

查看该仓库的历史版本信息:

git log --pretty=oneline

先把本地的分支回退到历史版本(例如上一个提交版本):

git reset --hard HEAD^

提示:上一个版本就是 HEAD^,上上一个版本就是 HEAD^^,当然往上 100 个版本写 100 个 ^ 比较容易数不过来,所以写成 HEAD~100

把当前分支推送到远程仓库,并且让远程仓库和当前分支保持一致:

git push -f origin master

现在,你已经完成了一次 Git 版本回退,并让本地分支和远程分支都回滚到上一个历史版本。

使用 git revert 命令

先把本地的分支恢复到历史版本(例如上一个提交版本):

git revert HEAD^

或者恢复到某个 commit(例如 b691045):

git revert b691045

执行该命令后,并不会对已经提交的代码产生影响,而是叠加一个 Revert "xxx" 描述的提交。

把当前分支推送到远程仓库,并且让远程仓库和当前分支保持一致:

git push origin master

现在,你已经完成了一次 Git 版本回退,并让本地分支和远程分支都回滚到上一个历史版本。

reset 和 revert 区别

  • 重设(reset)被设计为重新设置本地更改,支持 --mixed、--soft、--hard 三种方式。
  • 撤销(revert)被设计为撤销公开的提交(比如已经 push)的安全方式,本质是用某次 commit 时的代码再做一次 commit 提交,所以 git revert 不会对已经提交的代码产生影响。