【原子提交:IDEA实践】

原子提交:IDEA实践

背景

临近发版,某位老哥的个线上MR包含多个bug修复的commit记录,合入master在uat环境验证发现需要回滚其中某个commit记录,由于MR非原子性提交,不能快速在线上进行revert操作,需要手动修改执行bug commit记录再次发起MR,耽误版本发布。于是这几个月,小组内部开始推行原子性提交,归纳如下:

一、所有的线上MR请求只能包含一个commit记录

二、所有的MR只能关联一个业务单号(bugfix/新需求)

先前情况

一个线上MR包含十多个甚至几十个commit记录,commit message 信息随意,MR合入一个主分支(如dev)之后,cherry pick 到其它主干分支(如release或master)若存在冲突,解决冲突的成分较大,容易导致主干分支的差异变大

idea实践

idea实际操作

在平时的开发中,一个任务往往会有多次提交,以下图三个commit为例,假设我们开发A功能,每天下班前本地commit一下,到了第三天改功能开发完毕,自测基本没问题,此时需要发起MR请求,而本地个人分支存在三个commit记录,下面将描述如何在发起MR之前整理本地个人分支commir记录,本文所述的【原子提交】核心在于合并本地commit记录。

方式一:Squash Commits

  1. Shift + 鼠标左键选择需要合并的本地commit记录
  2. 修改压缩后的commit描述信息
    commit时间为最早的commit时间,commit message为刚才修改的

方式二:Undo Commit 后再 Commit

基于Squash Commits 前新建分支pine_tree_dev_undo_sample,切换到该分支,并且在Log过滤为该分支

将需要处理的提交记录一个一个Undo Commit。
可在Local Changes看到commit之前的变更文件
将变更文件统一提交即可

方式三:Reset

基于Squash Commits 前新建分支pine_tree_dev_reset_sample,选择需要合并commit的前一个commit,选择Reset
选择Soft模式
可在Local Changes看到commit之前的变更文件,后面的操作与方式二一样,将变更文件统一提交即可

push前操作

update本地主分支

将当前分支Rebase至本地主分支【若存在冲突则解决冲突】

Rebase后将本地个人分支推送至远程【如果存在冲突则强制push】,然后发起MR走合并流程,此时我们的MR就是符合原子性的

后悔药------回到squash commit之前:

复制代码
 - 在控制台输入`git reflog`
 - 关注需要回退的目标`commit hash`

按照格式git branch [branch_name] [commit_hash]执行git branch pine_tree_dev_rollback_squash 636f23f

Thanks all

相关推荐
IT小白杨12 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
豆瓣鸡12 小时前
算法日记 - Day3
java·开发语言·算法
萧瑟余晖13 小时前
Java深入解析篇九之NIO详解
java·网络·nio
The Chosen One98513 小时前
高进度算法模板速记(待完善)
java·前端·算法
极光代码工作室15 小时前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
Leighteen16 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言
名字还没想好☜16 小时前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine
gwf21617 小时前
SSD读写速度深度解析:顺序读写vs随机读写、IOPS、延迟,你的硬盘性能到底怎么看?
git·嵌入式硬件·缓存·github·智能硬件
圆山猫17 小时前
[Virtualization](三):RISC-V H-extension 与 Guest 执行模式
android·java·risc-v
caishenzhibiao17 小时前
期货先行者主图 同花顺期货通指标
java·c语言·c#