【git】合并多个提交记录

news/2025/2/22 21:39:05

1.说明

有时候因为某些小修改会导致代码多了很多不必要的提交,如果希望合并这些commit记录,我们可以使用rebase或者reset命令完成合并

rebase_3">2.rebase

这种方式是通过变基操作完成的,它适用于已经push到远程的情况,当我们变基好了之后再直接强制push到远程即可

2.1 查看已经提交的commit记录

git log --oneline

结果如下,那我这里只希望合并最后三个commit记录,所以我只关注最新的三个log就行

5cc3f74 (HEAD -> development, origin/development) LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
e9b346b LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
c51887f LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
...

rebase_19">2.2 rebase

我们要使用交互式命令,所以变基命令是git rebase -i HEAD~n,其中n是你要合并的commit个数,例如我这里要合并3个commit,那n就是3了,我的命令如下

git rebase -i HEAD~3

执行完命令之后它会打开一个交互环境,首先显示了你的commit记录,以pick开头,然后下面还有一些命令的使用说明,如下:

pick c51887f LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
pick e9b346b LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
pick 5cc3f74 LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)

# 变基 50c7aff..5cc3f74 到 50c7aff(3 个提交)
#
# 命令:
# p, pick <提交> = 使用提交
# r, reword <提交> = 使用提交,但编辑提交说明
# e, edit <提交> = 使用提交,但停止以便修补提交
...

现在我们需要修改一下记录,第一个commit记录前面的pick不动,把后面的commit记录前面的pick都改成squash,因为squash的特点就是会丢弃每个小步骤的详细记录,达到合并多个commit记录的效果

修改如下:

pick c51887f LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
squash e9b346b LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
squash 5cc3f74 LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
...

提示:git一般会使用vim打开,所以你可以输入i进入编辑模式,编辑好了之后再按:再输入wq再回车就能保存退出了

当你保存退出之后git又会打开另一个页面,可以编辑一下commit的massage,然后保存退出就行

2.3 提交记录

如果之前已经推送到远程分支了,你需要使用git push --force命令强制推送,但是如果别人也在使用该分支,可能会出现冲突,别忘了先让他pull一下解决冲突

reset_56">3. reset

gitreset命令就是回到之前的某个提交,但是你一定要使用--soft参数,这样才能保留已经改动的文件。比如说我们还是要合并3个commit记录,则命令如下:

git reset --soft HEAD~3

reset之后我们再把这些文件再次提交就行,当然需要配合--amend参数

git commit --amend
git commit -m "这是你的提交信息"

最后再配合--force命令把它强制推送到远程就行,记得让其他人先pull一下合并冲突

git push --force

http://www.niftyadmin.cn/n/5862784.html

相关文章

RocketMq\Kafka如何保障消息不丢失?

程序那点事 保证RocketMq和Kafka消息不丢失需考虑Producer发送、Broker存储、Consumer消费。需配置同步发送/刷盘、重试机制、幂等性生产&#xff0c;手动提交偏移量等策略。摘要由作者通过智能技术生成 RocketMq架构图 RocketMq消息不丢失 要想保证消息不丢失&#xff0c;需…

《重构-》

一、代码坏的味道 神秘命名 ​​​​​代码应该直观明了。要深思熟虑如何给函数、模块、变量和类命名&#xff0c;使它们能清晰地表明 自己的功能和用法。 重复代码 一旦有重复代码存在&#xff0c;阅读这些重复的代码时你就必须加倍仔细&#xff0c;留意其间细微的差异。如果…

git使用-克隆远程项目、分支管理

文章目录 克隆远程项目到本地1. 远程找到需要克隆的项目&#xff0c;复制ssh地址2. idea开启git版本控制&#xff08;如果已经开了&#xff0c;忽略此步骤&#xff09;3. clone远端项目4. 克隆完成 分支管理1. 新建分支2. 切换分支3. 合并分支4. 储存变化 克隆远程项目到本地 …

软件架构设计:软件工程

一、软件工程概述 软件工程的定义 软件工程是应用系统化、规范化、可量化的方法开发、运行和维护软件。 软件工程的目标 提高软件质量、降低开发成本、缩短开发周期。 软件生命周期 瀑布模型&#xff1a;需求分析→设计→编码→测试→维护。迭代模型&#xff1a;分阶段迭代开…

【Leetcode 每日一题】2209. 用地毯覆盖后的最少白色砖块

问题背景 给你一个下标从 0 0 0 开始的 二进制 字符串 f l o o r floor floor&#xff0c;它表示地板上砖块的颜色。 f l o o r [ i ] floor[i] floor[i] 为 ‘0’ 表示地板上第 i i i 块砖块的颜色是 黑色 。 f l o o r [ i ] floor[i] floor[i] 为’1’ 表示地板上第 i …

【够用就好005】-在VSCode中管理ECS服务器的实操步骤

前景提要&#xff1a;接触过云服务器&#xff0c;当前有一个可以使用的ecs服务器。 关于如何搭建配置云服务不在今天分享主题内。 亲测有效&#xff01;&#xff01;&#xff01; 通过 VSCode 直接配置服务器步骤 一.先安装ssh插件 CTRL shift x 插件界面输入ssh安装remot…

Golang连接使用SqlCipher

一、准备环境 需要下载MinGW、msys2、OpenSSL&#xff0c;并且注意都需要64位 已经整理成环境软件包&#xff0c;只需要下载&#xff0c;并配置环境变量 链接: https://pan.baidu.com/s/1NxF8aWqx7s97ntACOk77Ug 提取码: yhrv 二、代码 package mainimport ("database/s…

CTA策略【量化理论】

CTA策略演变史 全称&#xff1a;Commodity Trading Advisor &#xff08;商品交易顾问&#xff09; CTA最开始是指通过为客户提供期权、期货方面的交易建议&#xff0c;或者直接通过受管理的期货账户参与实际交易&#xff0c;来获得收益的机构或个人。 随着市场的发展&#…