git rebase+rever实现git代码回滚

前言

今天准备上线时,突然产品有大变动需要把这个版本的内容都废弃掉。因此我需要将dev分支的代码进行回滚,但我并没有dev分支的权限找leader操作又觉得太麻烦了。那么有没有办法从dev切出来一个feat/rollback分支,将代码回退到之前的代码,然后在提交一个PRdev上。答案是有的,接下来采用git rebase + git revert来实现

方案

  1. 第一种在feat/rollback执行git reset --hard <commit>之后将feat/rollback合并到dev分支,显示没有更新的改动。这是因为git reset不会产生新的commit节点,feat/rollback的commitId dev分支都有了
  2. 第二种在feat/rollback执行git revert start..end, 这个会需要我们处理startend的每一个节点。过于麻烦且每一次revert都会产生一个新的commit记录
  3. 第三种git rebase -i ~ + git revert 将所有回滚的记录压缩成一个commit,然后采用revert回滚这个commit,最终效果如下

实现

如下图: 我需要将f2a0c1ed之后的所有commit都废弃掉

  • 命令使用
ts 复制代码
// dev分支
git checkout -b feat/rollback
// 执行变基
git rebase -i commitId

// 终止变基
git rebase --abort

// 继续
git rebase --continue

// 废弃掉某个commitId的改动并且生成一个新的commit记录
git revert commitId
  • 回退的步骤
  1. 从dev分支切出来一个feat/rollback分支,使用git log --oneline确定回退的commitId
  2. 执行git rebase -i commitId
ts 复制代码
git rebase -i f2a0c1ed

我会看到如下图,所有都是pick状态 3. 合并..1b ~ ..41 到最旧的6f上。在合并的commit时,选择pick(p)最旧的6f。然后将6f之后的commit前的pick(p)都改为squash(s)如下图。然后执行exit以及:wq保存就会自动变基,将commit..1b ~ ..41都会合并6f节点上 4. 如果在上一步执行变基的过程中会有冲突,那么解决冲突然后git add .然后在git rebase --continue直到变基完成 5. 合并devfeat/rollback.

由于 feat/rollback 分支落后与 dev 分支,因此需要执行 git merge dev 将主分支向 feat/rollback 分支合并,合并后 git 会发现 ..1b..41 提交的内容和 feat/rollback 分支上 commitId 的修改内容是完全相同的,会自动进行合并,内容不变,但多了一个 commitId。 6. 在 feat/rollback 执行 revert 反提交

git revert commitId
  1. 提交feat/rollbackdev分支,在github的diff面板就能看到回退的内容了。 相当于你手动把这些内容删除掉,然后提交的pr一样。

注意: 这么做也有一个好处,比如那天产品突然反悔了这个版本的内容我还是需要上线。那么就可以直接采用git revert把上一次git revert产生的commitId进行恢复即可

总结

这一节我们学习了git rebase + git revert实现在新分支上回滚代码, 这么做的好处是不需要主分支的权限能快速找回此次废弃的代码新分支上执行回退操作

注: 一般情况下我们都要新建分支来执行回退或者合并的操作

相关推荐
獨枭3 小时前
CMake 构建项目并整理头文件和库文件
c++·github·cmake
蟾宫曲3 小时前
在 Vue3 项目中实现计时器组件的使用(Vite+Vue3+Node+npm+Element-plus,附测试代码)
前端·npm·vue3·vite·element-plus·计时器
秋雨凉人心4 小时前
简单发布一个npm包
前端·javascript·webpack·npm·node.js
liuxin334455664 小时前
学籍管理系统:实现教育管理现代化
java·开发语言·前端·数据库·安全
qq13267029404 小时前
运行Zr.Admin项目(前端)
前端·vue2·zradmin前端·zradmin vue·运行zradmin·vue2版本zradmin
魏时烟5 小时前
css文字折行以及双端对齐实现方式
前端·css
2401_882726486 小时前
低代码配置式组态软件-BY组态
前端·物联网·低代码·前端框架·编辑器·web
web130933203986 小时前
ctfshow-web入门-文件包含(web82-web86)条件竞争实现session会话文件包含
前端·github
胡西风_foxww6 小时前
【ES6复习笔记】迭代器(10)
前端·笔记·迭代器·es6·iterator
前端没钱6 小时前
探索 ES6 基础:开启 JavaScript 新篇章
前端·javascript·es6