news 2026/7/17 16:55:44

【原子提交:IDEA实践】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【原子提交:IDEA实践】

原子提交:IDEA实践

  • 背景
  • 先前情况
  • idea实际操作
    • 方式一:Squash Commits
    • 方式二:Undo Commit 后再 Commit
    • 方式三:Reset
      • Reset注意事项
    • push前操作
      • 后悔药——回到压缩(整理)提交记录之前:

背景

临近发版,某位老哥的个线上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之前的变更文件,后面的操作与方式二一样,将变更文件统一提交即可

Reset注意事项

确保需要合并的Commit都是本地个人分支的,不要吧其他人已合入主分支的代码也Reset掉,如果需要合并的多个Commit中间加杂着已经合入主分支的代码,可以Rebase当前本地分支至主分支,将个人的本地Commit记录提前,若不慎将已经合入主分支的代码Reset可以参考后悔药

push前操作

update本地主分支

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

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

后悔药——回到压缩(整理)提交记录之前:


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

按照格式git branch [branch_name] [commit_hash]执行git branch pine_tree_dev_rollback_squash 636f23f
【执行这个指令会生成名为branch_name分支,该分支最新的commit记录的commit_hash为指令中的commit_hash

Thanks all

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 16:52:15

抗辐射MCU在航天器高精度运动控制系统中的关键技术研究——基于AS32S601型微控制器的电机驱动与姿态控制应用分析

摘要:航天器姿态控制、太阳电池阵驱动、推进剂阀门控制等运动控制子系统是卫星平台的核心组成部分,其控制精度和可靠性直接决定卫星任务的成败。本文以国科安芯AS32S601型商业航天级微控制器为技术载体,从PWM波形生成精度、模拟信号采集能力、…

作者头像 李华
网站建设 2026/7/17 16:52:07

解密高效PSD到FairyGUI转换:现代游戏UI开发的专业解决方案

解密高效PSD到FairyGUI转换:现代游戏UI开发的专业解决方案 【免费下载链接】psd2fgui A tool for converting psd file to fairygui package. 项目地址: https://gitcode.com/gh_mirrors/ps/psd2fgui 在游戏UI开发流程中,设计师的PSD设计稿与程序…

作者头像 李华
网站建设 2026/7/17 16:49:57

小电视空降助手:终极B站广告跳过插件完全指南

小电视空降助手:终极B站广告跳过插件完全指南 【免费下载链接】BilibiliSponsorBlock 一款跳过小电视视频中恰饭片段的浏览器插件,移植自 SponsorBlock。A browser extension to skip sponsored segments in videos, ported from the SponsorBlock 项目…

作者头像 李华
网站建设 2026/7/17 16:46:21

如何在Vue项目中轻松集成百度地图:vue-baidu-map终极指南

如何在Vue项目中轻松集成百度地图:vue-baidu-map终极指南 【免费下载链接】vue-baidu-map Baidu Map components for Vue 2.x 项目地址: https://gitcode.com/gh_mirrors/vu/vue-baidu-map 还在为Vue项目中集成地图功能而烦恼吗?传统的百度地图AP…

作者头像 李华
网站建设 2026/7/17 16:46:15

Navicat for Mac无限试用终极指南:3种方法实现永久免费使用

Navicat for Mac无限试用终极指南:3种方法实现永久免费使用 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为…

作者头像 李华
网站建设 2026/7/17 16:40:07

eBPF技术深度解析:Agith如何实现高性能系统监控

eBPF技术深度解析:Agith如何实现高性能系统监控 【免费下载链接】Agith linux command influence analysis 项目地址: https://gitcode.com/openeuler/Agith 前往项目官网免费下载:https://ar.openeuler.org/ar/ Agith是基于eBPF技术的Linux命令…

作者头像 李华