IDEA (任意 JetBrains IDE)拆分先前 commit
最近在合并上游代码,遇到了一个问题:某个 commit 杂糅了几个不同的特性修改,这可能会导致 rebase 上游代码时需要再对该 commit 进行额外的代码冲突处理
解决方法:合并上游分支前,拆分杂糅的 commit,并将其中不同的特性修改合并(Squash)回相关的 commit。可以直接通过命令行进行操作,可以参考:Break a previous commit into multiple commits。也可以通过 JetBrains 家内置的 Git 进行操作,下面会介绍 IDEA 图形化操作的方法
非先前 commit 的拆分
对于刚提交的 commit,要拆分多个 commit 是非常容易的,因为我们只要 soft reset commit,将 commit 内容撤销回至 暂存区,就可以随意提交 commit
如果对于 soft reset 不太了解,可以参考我之前的博客:Git 中的回退操作:reset 和 revert
先前 commit 的拆分
先前 commit 指的是:在目标 commit 后已经有了若干个 commit。它无法直接通过 soft reset 进行拆分,因为这样会丢失后续的 commit,如下图,我们需要拆分 B commit,我们就无法直接使用 soft reset ,因为这样会丢失 C 和 D commit 的修改
所以我们需要使用 rebase,具体步骤:
- 在 交互式 (interactive) rebase 中将
B标记为edit,这时B后面的 commit 会被暂时隐藏起来 - 使用
soft reset将B撤销回暂存区 - 将
B的修改内容分多个 commit 提交B1和B2 - 使用 rebase 的
continue将刚才隐藏的C和D恢复回来

实例准备
演示使用 IDEA,其实 JetBrains 家的使用逻辑差不多,示例仓库使用:Learn Go with Tests
git clone git@github.com:quii/learn-go-with-tests.git
需要用到 Rebase,IDEA 默认保护主分支,改写 commit 记录的功能会被禁用

需要先取消分支保护,移除 Protected branches 中的 master;main

假设我们需要将下面 commit 拆分为两个:

1. 启动 Rebase 并标记目标 commit 为 edit
点击 Interactively Rebase from Here...

选择需要拆分的 commit,右键选择 Stop to Edit,然后再点击 Start Rebasing

这时有右下角会提示您正在处于 Rebase 状态
选择框可以选择 Continue 即继续 Rebase,Abort 则会退出 Rebase

commit 列表也会显示感叹号

2. 使用 soft reset 将 commit 撤销回 暂存区
我们需要先 soft reset 到目标 commit 的上一个 commit
选择上一个 commit,右键选择:Reset Current Branch to Here...

选择 Soft,这样目标 commit 的修改就会退回到暂存区


3. 将暂存区改动分为若干个 commit 提交
这个时候我们就可以继续分开提交两次 commit


查看 log,两条 commit 被成功提交

4. 使用 rebase 的 continue 恢复剩下的 commit
这时候我们需要继续 Rebase,将剩下的 commit 还原回去:点击右下角分分支按钮,选择 Continue Rebase

完成 Rebase 后,剩余的 commit 就会被追加到我们新提交的 commit 后面,至此我们就完成了先前 commit 的拆分

Rebase edit 的拓展
因为这里的案例只是拆分 commit,没有对 commit 进行修改,如果是修改的话,修改完成后需要使用 git add 将文件标记为已修改,才能使用 rebase 的 continue,这样该 commit 就会被修改。后续的 commit 有可能与本次的改动产生冲突,需要手动处理冲突
参考资料
Break a previous commit into multiple commits
IDEA (任意 JetBrains IDE)拆分先前 commit的更多相关文章
- JetBrains IDE 基本快捷键
转载自:https://nextfe.com/jetbrains-ide-shortcuts/ 一个好的手艺人很熟悉他的工具.软件开发者也不例外.所以,在编程的过程中,值得了解一些键盘快捷键,以免因为 ...
- webstorm+nodejs+JetBrains IDE Support+chrome打造前端开发神器
#webstorm+nodejs+JetBrains IDE Support+chrome打造前端开发神器 -- 工欲善其事 必先利其器 ##各工具介绍 `webstorm`是**JetBrains* ...
- WebStorm + JetBrains IDE Support 实现自动刷新功能
WebStorm 7.0 + live eidt + JetBrains IDE Support 实现自动刷新功能, WebStorm 7.0 已自带live eidt扩展 并可更改端口,WebSto ...
- WebStorm使用JetBrains IDE Support调试
1.安装WebStorm 2.安装谷歌的chome浏览器,并切换到开发者模式 3.下载并安装 JetBrains IDE Support(将2.0.7_0.crx文件直接拖到谷歌浏览器中就会自动安装) ...
- 关闭jetbrains ide support 正在调试此浏览器提示
1 安装JetBrains IDE Support插件 插件地址 2 启用插件 3 设置访问端口 4 WebStorm中设置Live Edit 5 关闭"JetBrains IDE Supp ...
- JetBrains IDE全新UI预览版来了,要做简洁与强大兼顾的IDE
5月23日,JetBrains发布了一篇博文,透露他们正在实现一套全新的界面界面. 他们认为目前行业中的用户界面趋势已经发生了演变,很多新用户认为JetBrains IDE的界面过于笨重,而且过时.所 ...
- IDE:IDEA Commit Changes Dialog local changes refresh
IDEA提交代码,一直卡着不动,显示:Commit Changes Dialog local changes refresh 修改方法为: go to settings - version contr ...
- mac 下jetbrains IDE系列IDE主题
1.直接粘贴导入 使用shift+command+g键进入: ~/Library/Preferences/ 在下边找到当前的IED(WebStrom.IdealIC.PyCharm) 然后在下边找到c ...
- Jetbrains IDE 中 compass sass 设置
环境 Ubuntu 13.10 1. 安装ruby sudo apt-get install ruby 如果后面安装 compass 时遇到安装失败,提示:“[Ubuntu] ERROR: Faile ...
- PyCharm 恢复默认设置 | JetBrains IDE 配置文件安装目录
网上的答案为什么都乱七八糟并且全都全篇一律?某度知道是发源地? 先说 Mac 按需运行下面的 rm 删除命令 # Configuration rm -rf ~/Library/Preferences/ ...
随机推荐
- NC26253 小石的妹子
题目链接 题目 题目描述 小石有 n 个妹子,每个妹子都有一个细心程度 \(a_i\)和一个热心程度 \(b_i\) , 小石想给她们一个重要程度 \(t_i\)(重要程度为 1 表示最重要,重要程 ...
- RocketMQ—RocketMQ消息重复消费问题
RocketMQ-RocketMQ消息重复消费问题 重复消费问题的描述 什么情况下会发生重复消费的问题: 生产者多次投递消息:如果生产者发送消息时,连接有延迟,MQ还没收到消息,生产者又发送了一次消息 ...
- android架构组件Lifecycle
Lifecycle 组件指的是 android.arch.lifecycle 包下提供的各种类与接口,可以让开发者构建能感知其他组件(主要指Activity .Fragment)生命周期(lifecy ...
- TS内置类型与拓展
TS内置类型与拓展 TypeScript具有类型系统,且是JavaScript的超集,其可以编译成普通的JavaScript代码,也就是说,其是带有类型检查的JavaScript. 内置类型 Type ...
- Swoole从入门到入土(7)——TCP服务器[大杂烩]
这一篇是异步风格的TCP服务器的最后一篇,主要的目的是疏理之前几篇没提到的一些比较有用的属性.配置.函数与事件,当然不是全部.如果想知道全部,请查看官网. 1.属性 Swoole\Server-> ...
- Java压缩和解压缩zip文件
介绍 Java提供的java.util.zip包只支持zip和gzip.至于更多格式的压缩可以选择apache的Commons Compress. 参考:https://o7planning.org/ ...
- 【Android 逆向】【攻防世界】easyjava
1. apk 安装到手机,提示输入flag 2. jadx 打开apk看看 private static char a(String str, b bVar, a aVar) { return aVa ...
- 【LeetCode哈希表#3】快乐数(set)
快乐数 力扣题目链接(opens new window) 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程 ...
- 【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)
问题描述 使用Azure Storage Table的REST API,实现根据过滤条件删除满足条件的数据,调用方法为 Delete Entity (Azure Storage) 问题实现 第一步: ...
- 使用OpenFeign远程调用时请求头处理报错问题
1. 错误信息 basic.result.exception.OtherException: feign error:系统异常:Content type 'multipart/form-data;bo ...