当前位置: 首页 > news >正文

git如何将多个提交合并为一个提交

目录

第一种:使用git rebase命令

第二种:使用git reset命令 + 重新提交


第一种:使用git rebase命令

使用以下命令的其中一种启动交互式 rebase

git rebase -i 你想要合并提交的父提交的哈希值git rebase -i <commit-hash>^  
(^ 符号用于指定该提交的父提交,即你想要从这个父提交之后的所有提交开始 rebase)git rebase -i HEAD~n
(n表示要合并的提交个数)

比如你进行了五次提交

C1 => C2 => C3 => C4 => C5

现在你想把最新的C3、C4和C5这3个提交合并为一个提交,最终提交历史像下面这样

C1 => C2 => C345

则你可以用以下三种命令中的一种

git rebase -i C2的CommitIDgit rebase -i C3的CommitID^git rebase -i HEAD~3

交互式 rebase 会打开一个文本编辑器(如 vim),列出你想要重新应用的提交,大概像下面这样。

pick   C3的CommitID    C3的提交信息
pick   C4的CommitID    C4的提交信息
pick   C5的CommitID    C5的提交信息# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容

你可以通过以下方式合并提交:

  • 将你想要合并的提交前面的 pick 改为 fixup 或 squash(两者都用于合并提交,但 squash 会保留合并提交的日志消息,而 fixup 会丢弃它,只保留第一个提交的日志消息)。
  • 你可以将除了第一个提交之外的所有提交都改为 fixup 或 squash,以将它们合并到第一个提交中。

比如你想把C3、C4和C5这3个提交合并为一个提交,且提交信息用C3的提交信息,则可以将温变编辑为像下面这样

pick   C3的CommitID    C3的提交信息
fixup   C4的CommitID    C4的提交信息
fixup   C5的CommitID    C5的提交信息# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容

然后保存你的更改并关闭编辑器。Git 将根据你的指示重新应用提交。

如果 rebase 过程中出现冲突,Git 会暂停 rebase 并让你解决冲突。解决冲突后,使用 git add 来标记冲突已解决,并使用 git rebase --continue 来继续 rebase 过程。

如果 rebase 成功完成,你的提交历史就会更新,多个提交会被合并为一个提交。你可以使用 git log 来查看新的提交历史。

第一种方法讲解完毕。



第二种:使用git reset命令 + 重新提交

首先使用git log查看提交历史,比如结果像下面这样

提交5 CommitHash5提交5信息提交4 CommitHash4提交4信息提交3 CommitHash3提交3信息提交2 CommitHash2提交2信息提交1 CommitHash1提交1信息

如果你想把提交5、提交4、提交3合并为一个提交,你可以先将版本回退到提交且在回退时保留工作区的变动,使用以下命令:

git reset CommitHash2

这条命令会将版本回退到提交2,这可以通过git log命令可以查看到。同时工作区内容仍为提交5版本的内容。

然后通过git status命令可以看到提交2到提交5之间的变动情况

然后你可以通过git add和git commit来生成一个提交,这样你就将提交5、提交4、提交3合并为了一个提交。

第二种方法讲解完毕。



对于上面这种操作,你的提交历史就变成了提交1 => 提交2 => 由345合并的那个提交。

但是有时,远端分支版本比较落后,而本地分支版本较新,远端分支版本到本地分支版本之间有多个提交,你想把这多个提交合并为一个提交。可以先将本地分支回退到远程分支一样的版本同时保留工作区的变动,使用以下命令:

git fetch origingit reset origin/远端分支名称# 这里origin是远端仓库的别名

然后和刚才一样,你可以通过git add和git commit来生成一个提交,这样你就将远端分支版本到本地分支版本之间的多个提交合并为了一个提交。



end

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数学建模之数据分析【八】:数据预处理之数据格式化
  • 【傅里叶分析】复数基础知识
  • 搭建NFS服务器
  • 《黑神话悟空》:你绝对想知道的秘密
  • 编程达人Windows核心编程 第18章 演示如何使用堆
  • 无知是福-谈环境计算
  • 电机学习记录
  • 请说一下单例模式的概念及应用场景
  • DB-GPT开源项目文档入门
  • Python中的基本数据类型:构建坚实编程基石
  • centos7安装Kafka单节点环境部署一-ZooKeeper安装与配置
  • UE5-C++入门教程(二)---编写Editor类别的自定义模型实现小球规划路线的可视化
  • npm install报错,解决记录
  • 基于x86 平台opencv的图像采集和seetaface6的人脸朝向姿态估计功能
  • Spring OAuth2授权服务配置示例
  • canvas 五子棋游戏
  • Cookie 在前端中的实践
  • ECMAScript入门(七)--Module语法
  • js算法-归并排序(merge_sort)
  • PHP 的 SAPI 是个什么东西
  • Quartz初级教程
  • SOFAMosn配置模型
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 给Prometheus造假数据的方法
  • 简析gRPC client 连接管理
  • 前端之Sass/Scss实战笔记
  • 如何用vue打造一个移动端音乐播放器
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 一、python与pycharm的安装
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 【云吞铺子】性能抖动剖析(二)
  • 如何用纯 CSS 创作一个货车 loader
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • #Ubuntu(修改root信息)
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (10)STL算法之搜索(二) 二分查找
  • (3)(3.5) 遥测无线电区域条例
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (一)Linux+Windows下安装ffmpeg
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (自用)仿写程序
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net core Swagger 过滤部分Api
  • .net 简单实现MD5
  • .net 托管代码与非托管代码
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)