Idea-Git与命令行操作合并多次commit为一个/合并提交--图解

Git分支管理避坑指南:在IDEA中优雅地Squash多个提交并合并到测试分支 本文详细介绍了在IntelliJ IDEA中,如何通过Squash(压缩)和Cherry-Pick(挑选)的组合操作,将开发分支上的多次琐碎提交合并为一个逻辑完整的提交,并优雅地合并到测试分支。该方法能有效保持分支历史的整洁与清晰,提升代码审查效率,是团队协作中Git分支管理的实用避坑指南。 阅读详情
AI摘要

本文通过实例演示如何在IntelliJ IDEA和命令行中合并git的多个提交,包括rebase操作、Squash/fixup选择、提交信息重命名及最终推送到远程仓库。

简介说明​

        本文用实例介绍如何合并git的提交。用Idea可视化和命令行操作两种方法进行展示。

​为什么需要合并提交​

        实际开发会有这种场景:开发在开发分支修复了某个bug,但提交了多个commit,将它cherry pick到测试分支很麻烦,如果只将一个提交cherry pick到测试分支就会很方便。

​action含义​

pick:git会应用这个补丁,以同样的提交信息(commit message)保存提交

reword:git会应用这个补丁,但需要重新编辑提交信息

edit:git会应用这个补丁,但会因为amending而终止

squash:git会应用这个补丁,但会与之前的提交合并

fixup:git会应用这个补丁,但会丢掉提交日志

exec:git会在shell中运行这个命令

方案1:使用Idea
​需求描述​

下边红框里的3此提交已经push到远程仓库,现在想把它合并为一条,这样方便cherry pick到其他分支。

​第1步:在首次提交记录上rebase​

本处的首次提交是“第1次修改”。

右键“第1次修改”=> Interactively Rebase from Here

​第2步:合并提交(选squash或fixup)​

选中“第2次修改”=> 点击“Squash”

选中“第3次修改”=> 点击“Squash”

这里也可以ctrl+A,然后点击“Squash”,效果一模一样。

结果如下:


第1次提交默认是“pick”。本处Idea无法设置,写死是pick
Reword:可以修改单个的提交信息
Squash那个下拉还可以选择“fixup”。

​第3步:重命名提交​

选中“第1次修改”=> Reword=> 输入新的提交信息

修改“第1次提交”为:“第1,2,3次提交”,改完效果如下

​第4步:执行rebase​

点击上边一步的“Start Rebasing”之后,提交结果如下:(3条提交合并为了一条)

​第5步:push​

        本步我采用Force Push,因为这个bug分支只有我自己改。

         如果他人也在这个里边,要用Merge,见下方“push详解”。如果与别人在同一个分支,还Force Push,会覆盖别人的代码,小心被套麻袋????

 Force Push,结果如下:(成功提交)

注意事项
上一步中,如果选择“Push”,而不是“Force Push”,则push被拒绝,需要选择操作:

“Merge”:原先的3条提交信息还在,只是会新生成1个整合后的提交。

“Rebase”:后边需要force push,原先的3条提交信息会被替换为1条提交。

​若选择“Merge”​

        如果点击“Merge”,原先的3条提交信息还在,只是会新生成一个整合后的提交(示例中是“第1,2,3次修改”)。

结果如下:

​若选择“Rebase”​

结果:

此时需要Force Push,结果如下:(成功提交)

如果上一步又选了“Push”,结果如下:(再次出现了选择“Merge”还是“Rebase”)

 如果点击“Rebase”,结果如下:(提交记录恢复原样)

  如果点击“Merge”,结果跟上边“​若选择“Merge”​”是一样的:

方案2:使用命令
       

(1)git log看一下当前分支的提交情况,下图中有三个commit点。从先到后是:add 1 line,add 2 line, add 3 line。需求是:把add 2 line, add 3 line这两个commit点合并成一个commit点。

 (2)开始合并,敲下面这个命令:这里面的commitId是你要合并的两个commit后所形成的一个commitId需要跟着的commitId。在这边也就是add 1 line的commitId.

git rebase -i commitId

 其中,-i 的参数是不需要合并的 commit 的 hash 值,这里指的是第一条 commit, 接着我们就进入到 vi 的编辑模式

 进入vi模式后,在键盘上敲i键进入insert模式。这时候先看看这里面的东西是什么含义,

pick 的意思是要会执行这个 commit
squash 的意思是这个 commit 会被合并到前一个commit
我们这边需要将"add 3 line"这个commit合并前前一个commit,也就是合并到“add 2 line”的commit中,那就需要修改成如下的:

 修改完成后,按esc键,冒号,输入wq进行保存。之后会继续跳转到commit message 的编辑界面:

注释中有写第一个commit信息和第二个commit信息,现在需要你合并这两个信息成一个commit信息。我这边合并成如下信息:

然后你就保存退出,跳回到最初的命令界面:

 看到successfully的字样就说明成功了。再git log看一下commit情况:

 从图中就看到已经将add 2 line和add 3 line的commit合并成了this is combination of 2 commit。

idea git 合并多个commit 可以看到右侧的文件变更已经union起来了。 阅读详情

相关推荐

git-rebase-reword:修改任何git commit不仅要持续

git-rebase-reword git-rebase-reword是一个简单的git命令,以与修改相同的方式来更改一个提交(最后一个或更旧的提交) 文献资料 它是基于对rebase交互操作的名称来命名的,以补充提交“ reword”。 参见和 -section交互模式-## Install 下载并符号链接到您的路径 $ git clone https://github.com/albfan/git-rebase-reword.git $ cd git-rebase-reword $ ln -s $PWD /git-rebase-reword ~ /bin/ $ ln -s $PWD /reword_editor ~ /bin/ ##用法 $ cd < repo> $ git rebase-reword < commit> 例子 # reword

IDEA GIT 合并commit

步骤 前提:当前分支在对应commit所在的分支下 打开IDEA的GIT侧边栏,左侧选择本地的分支或者远端的分支,中间将展示提交的commit,右侧将出现每一个commit对应的修改文件 选择要合并的最早的一个commit,右键选择interActively rebase from here… 在这里顺序会反过来, 值得注意的是fixup 意思是将下面的commit合入到上一个commit, drop则 意味着删除该 commit,对应的修改也会随之消失, 慎用 效果如下 这意味着将2

weixin_44131922的博客 7125

智能农业大棚

目 录 摘要 1.绪论 2.系统概述及单片机介绍 2.1整体方案设计思想 2.2系统组成 2.2.1主控芯片的选择 2.2.2传感器模块选择 2.2.3电机驱动模块 2.3 单片机介绍 2.3.1 AT89C51单片机的基本组成 2.3.2AT89C51主要特性 2.3.3管脚说明 2.3.4 AT89C51单片机的存储器 2.3.4.1 程序存储器 2.3.4.2 数据存储器 2.3.5 振荡电路和时钟 2.3.6 AT89C51的中断

weixin_70886450的博客 1327

IDEA中怎么将多次Commit合并成一个

我们在开发一个功能的过程中,可能会在本地分支上多次提交,那就会产生多次提交的记录,比较零碎,那么有没有什么办法把多次提交合并成一次呢。3、把除了第一条记录的Action改成squash,点击Start Rebasing。1、这是git本地分支的4次提交记录,现在希望合并成一条提交记录。5、可以看到日志就剩一条了,这时候就完成了多次Commit的合并。4、修改提交的日志,点击Continue Rebasing。

dongdong199033的博客 8199

MIMIC数据库基本信息分析

一、MIMIC数据库中26张表介绍 数据库中一共有26张表,记录患者入院的各种信息,每张表的介绍如下所示。 表格名 信息 admission 患者基本信息,比如性别、种族、语言、宗教、婚姻、入院和出院时间、死亡时间等 callout 提供病人准备从ICU转出或者已经从ICU转出时相关信息 caregivers 记录医护人员信息(ID、类型、附加...

m0_37520426的博客 1万+

别再傻傻分不清了!一文搞懂电机里的‘旋变’和‘编码器’到底有啥区别

本文深度解析电机位置传感器中旋转变压器(旋变)与编码器的核心区别,包括工作原理、精度对比及环境适应性。通过实测数据和典型应用场景,帮助工程师在工业机器人、新能源汽车电机等关键领域做出精准选型决策,提升系统可靠性和控制精度。

weixin_28689507的博客 499

Git图解-IDEA中的Git操作

Git图解-IDEA中的Git操作

langfeiyes的博客 4073

NU1680无线充电接收器在TWS耳机中的应用实战:I2C调压与QI协议适配

本文详细解析了NU1680无线充电接收器在TWS耳机充电仓设计中的应用实战。重点阐述了其无固件设计、I2C接口动态调压功能如何解决不同QI协议发射器的兼容性难题,并分享了硬件设计、PCB布局、与发射端联调及安全测试等关键环节的实践经验,助力开发者快速实现稳定高效的无线充电方案。

weixin_28432777的博客 231

git 代码回滚 reset revert 详解 IDEA操作 4种reset区别

我们用 git 在单人或者多人开发的时候,有时候出现的 错误的提交 ,我们此时 撤销 之前的操作,回退、回滚 到之前的版本,这里总结了 2种方法:reset(删除错误提交) 和 revert(新建提交覆盖)

半亩方糖 2万+

大模型——Coze工作流实战:一键生成像素风格视频

本文介绍了如何利用Coze平台工作流生成像素风格心理学短视频的方法。通过创建工作流、设置变量节点、调用大模型生成文案、数据格式化处理、合成音频、生成字幕等步骤,最终实现从输入主题到生成完整视频的自动化流程。文章详细展示了每个节点的具体配置方法,包括提示词编写和数据处理脚本,为读者提供了完整的像素风格视频制作解决方案。

816

基于轻量化网络的干扰信号智能识别算法

针对干扰信号识别时卷积神经网络模型体积大、训练周期长、对硬件存储和计算要求高等问题,本 文提出了一种基于改进轻量级网络模型 SqueezeNet 的干扰信号智能识别算法。该方法首先利用距离多普勒 (Range‑Doppler,RD)处理获得目标及干扰信号的RD图像,接着采用滑窗变换、归一化等技术对RD图像进行重 塑;然后采用基于 RD 信息尺寸的隐层和通道剪枝措施对 SqueezeNet 网络进行改进,缩小了模型尺寸和存储空 间;最后利用不同参数的测试样本拓展网络模型的泛化性能。

qq_43416206的博客 542

IDEA向gitlab提交代码并合并分支全详细流程(图解)

首先不同的IDEA版本对应的git的commit、push位置不尽相同,所以要找到自己对应的提交位置。

m0_46481627的博客 934

Android11原生设置屏幕亮由Gamma变化改为线性变化

从Android9 开始屏幕亮度调解变成非线性变化,这样的话就会出现 之前亮度变化很小,到后面时变化亮度很快; 修改为线性变化,只需要修改 ./frameworks/base/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache L

Android 4923

git rebase基本使用

1.为什么要使用rebase? 在我们使用git中,经常性的会创建新的分支进行功能开发或者代码优化,commit会产生很多,其中很多commit都是一些无用或者重复的,对于用户并没有什么帮助,反而会给用户产生误解,这个时候我们需要把这些commit进行rebase,其实就是把多次的commit进行合并成为一次commit 2.什么是rebase? rebase通俗来说就是把多次commit合并成一次commit,我称之为rebase 3.名称解释 pick:保留该commit(缩写:p) reword:

constant_rain的博客 3441

华为OD机试双机位C卷:打印机队列 (C++/Py/C/Java/Js/Go)

华为OD机试双机位C卷 打印机队列,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 打印机队列。

qq_45776114的博客 1793

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【git使用】历史commit的分割(git rebase和 git reset的联合使用)

因为每一个commit只会保存它的parent节点,并不知道它的下一个节点时什么。比方说在一次 commit 中,包含了两个编辑过的文件(A 和 B);commit 01, commit 02, commit 03 为最近的三次提交,是提交时的备注信息。可以配合不同的模式(–mixed, --soft, --hard)达到不同的效果。后,会列出 commit-B 之后的所有 commit,之后 vim 形式操作。该命令主要用于修改历史 commit,如历史 commit 的拆分,合并等。

叮当猫的喵i 2095

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

idea提交git差件_新手福利,idea里面git各场景使用图解

每天分享java干货,欢迎关注,你的成功源于点点滴滴!工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下:假设小组中有两个人,组长小张,组员小袁场景一:小张创建项目并提交到远程Git仓库场景二:小袁从远程Git仓库上获取项目源码场景三:小袁修改了部分源码,提交到远程仓库场景四:小张从远程仓库获取小袁的提交场景五:小袁接受了一个新功能的任务,创建了一个分支并在分支上开发场景六:小袁把分支提交...

weixin_39665507的博客 163

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Git 提交代码被拒(Push rejected)超详细图文完整解决方案

Git推送被拒解决方案 问题概述 Git推送被拒通常表现为"non-fast-forward"错误,主要原因是远程分支领先于本地分支,常见于: 远程仓库有初始提交(README等) 多人协作时他人已推送代码 网页端直接修改过文件 解决方案 推荐方案:拉取合并后推送 git pull origin master git push origin master 变基方案(保持线性历史) git pull --rebase origin master git push origin master 强制推送(仅限个人

weixin_48053866的博客 7206

git提交本地代码到本分支仓库和远程分支操作步骤

场景: 此处为git初学者操作git提交代码到本地分支和远程开发分支的操作步骤及图解(注:已经安装过git并提交过初始代码之后的代码提交操作) 创建本地分支与远程分支 例如现在有两个分支,master和develop git checkout master //进入master分支 git checkout -b frommaster //以master为源创建分支fromm...

Alice_qixin的博客 3万+

拉了同事代码,提交区突然多出几十个文件:到底是拉成功了,还是没提交?

确认最新提交无误后,再推送自己的实际分支。若推送被拒绝,应先分析远程是否又有更新,不要直接把强推当成通用解决方案。推送之后,要核对远程跟踪状态时,可以执行。这是联网并更新本地引用的操作,不修改正常工作区文件,但会改变本机获知的远程状态。在已经获取最新远程引用的前提下,下面两条命令用于检查差异;dev-mine两边都没有输出,表示 HEAD 与该远程跟踪引用没有独有提交。它证明的是上次 fetch 的状态,不能保证远程永远不再变化。第一列是本地独有数量,第二列是远程跟踪分支独有数量;0 0。

yurenpai的博客 64

Git合并前必知:Merge与Rebase的核心差异与团队协作实践

在版本控制系统中,分支管理是团队协作的核心基础。其原理在于通过创建独立分支实现并行开发,再通过合并操作将代码变更集成回主线。这一技术价值在于保障代码质量、支持并行开发与追溯历史。在持续集成/持续部署(CI/CD)流程中,清晰的分支合并策略直接影响流水线的可靠性与效率。具体到Git操作,`git merge`与`git rebase`是两种主流的集成策略,它们对代码仓库历史记录和团队协作流程产生深远影响。`git merge`通过创建合并提交保留完整开发上下文,适合公共分支集成;而`git rebase`通过

weixin_34245082的博客 572

git idea 分支合并到另一个分支_git创建和合并分支贴图

我理解是圈圈是commit,master是分支,dev也是分支,HEAD是指向master或者指向dev的指针,这取决于你在分支上操作,下面图研究下很有帮助.master指向你最新的提交,HEAD指向mastergit switch -c dev创建并切换分支,图就变成了dev指向你最新的提交,并HEAD指向你的dev,那是因为你切换了dev,所以HEAD指向你的dev接着在dev分支上操作,co...

weixin_36084318的博客 214

Git在idea中的操作,有图做解释

Git分布式项目管理工具规则 先拉取、编码、提交 拉取后只要是写了代码,就要提交,不可以先写代码再拉取更新。 如果有冲突,写了代码之后先提交,再解决冲突 创建码云仓库1 Git使用步骤 git公钥的生成,把公钥给项目经理 打开之后运行命令:ssh-keygen -t rsa 在本地找公钥 加载公钥到服务 文件上传(项目经理) 项目上传图解 打开idea创建git仓库 代码先提交本地仓库(暂存区)先add 再commit 提交本地 提交本地时注意清除掉编译信息 上传本地后,先连

weixin_46128942的博客 1327

图解vs code+git的使用

项目的分支结构 积分系统运用了git进行版本管理,大致结构是: (1)分为远程分支和本地分支,远程分支是组长在项目初始时就创建好了的,本地分支是我们每次新拉下代码时,都需要自己新建的。 远程分支:master——dev-developing——dev-wzy、dev-zs、dev-ls 本地分支:master——dev-wzy (2)使用的大致流程是:在本地分支dev-wzy上开发,在远程分支d...

玫瑰与鹿° 869

Webstorm2020-git图解使用快速入门及中英对比

文章目录1. 引言2. 配置3. 右键菜单3.1 各个选项的含义3.2 Respository的二级导航4. Version Control面板4.1 Local Changes5. Commit Changes6. log面板6.1 小结7. clone项目8. 快捷操作9. 优势 1. 引言 我们在上面看到了git面板的很多选项,想要弄清楚各个选项具体要做什么,常用且常规的git理论知识及操作经验不可少。 先看对git操作的简单分类,如下—— 远程仓库类:git clone/remote/pu

xiao廸要飞 3523

git 教程、常用命令

git 教程、常用命令

freeking101的博客 6621
上一篇: 基于python ttkbootstarp的密钥生成器
下一篇: 详解Python中字符串前“b”,“r”,“u”,“f”的作用
shadow_zed
博客等级 码龄10年 6289粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值