如何使用git进行代码回滚

git回滚主要分为本地回滚远程回滚

在本地开发时,未 git push 之前我们都可以使用 git reset 进行回滚,当然,对于远程commit也是有效的,但不推荐,因为可能会冲掉其他人的 commit 记录,远程一般使用 git revert 进行回滚,下面就两种回滚方式进行具体说明。

git reset

在介绍 git reset 之前,我们先了解一下git中的区域划分:

  • 工作区(WorkSpace):开发的环境
  • 暂存区(Stage/Index):使用 git add 相关命令将工作区的代码提交到暂存区
  • 本地库(Local Repo):使用 git commit 相关命令将工作区的代码提交到本地库
  • 远程库(Remote):使用 git pu sh 相关命令将本地库推送到远程
    借用网上的一张图片进行说明
    git workSpace

在使用 git reset 之前,我们需要清楚 git reset 等同于 git reset --mixed ,除此之外还有 git reset --hardgit reset --soft

git reset 是对HEAD指针的指向进行更改,历史记录中不会出现放弃的提交记录

  • git reset --hard 工作区、暂存区、本地仓库回滚到对应commit-id
  • git reset --mixed 工作区代码不受影响,但是暂存区、本地仓库区的代码回滚到对应的commit-id
  • git reset --soft 工作区和暂存区的代码不会受到影响,本地仓库区的代码回滚到对应的commit-id

可以看出来,这三者对于git区域的影响范围依次递减

注意:git reset 回滚不会对远程分支产生影响,所以在回滚完成进行 git push 的时候,会提示本地分支比较旧,需要先使用 git pull 拉取远程分支,由于我们的目的是回滚,所以当然不需要再拉取远程分支了,此时,直接使用 git push -f 强制推送本地回滚后的代码至远程。

  • git reset –hard # 回到其中你想要的某个版
  • git reset –hard HEAD^ # 回到最新的一次提交
  • git reset HEAD^ # 此时代码保留,回到 git add 之前

暂存区回滚时,我们也可以使用 git reset

git reset 可以将暂存区的代码回滚到工作区。当我们使用 git add 相关命令将修改内容提交到暂存区,此时又反悔了,可以使用 git reset HEAD . 或者 git reset HEAD a.txt 将代码回滚到未 add 之前。

git revert

git revert 理解为回滚但由又不是回滚,等于是重新commit了一个修改,抵消掉 git revert B 中指定的分支。
比如:我们commit了三个版本A、B、C,由于某些原因需要撤销 B 保留C 的更改,这个时候就可以用 git revert B 命令来反做 B ,生成 新的版本 D ,版本 D 中保留了 C 的代码, B 的修改被重置。

其他的回滚方式

工作区

工作区回滚,使用 git checkout

没错 git checkout 也可以回滚代码(或者叫“舍弃”)

  • git checkout – a.txt # 丢弃某个文件,或者
  • git checkout – . # 丢弃全部
    如果我们对代码进行了一些修改,增、删、改,此时又不想要了,可以使用 git checkout -- .

当然,还是推荐使用图形化工具,更顺手,而且不容易出错。
回滚远程仓库前记得提前通知团队其他成员!!!

作者: 果汁
文章链接: https://guozhigq.github.io/post/423abe9e.html
版权声明: All posts on this blog are licensed under the CC BY-NC-SA 4.0 license unless otherwise stated. Please cite 果汁来一杯 !