Git如何将多个commit合并一个commit

问题场景:我在fork的仓库提交多个commit后,准备向原仓库提交pr,但是原仓库要求一个pr一个commit,因此需要先将这些commit合并为一个。

1.先拿到要合并的commit中最早的一个的commit id,然后进入仓库,使用如下git log命令拿到这个commit的前一个commit的id(打印出的第二个,如下图)
git log --pretty=format:"%H %P" -n 1 <最早的一个的commit id>

在这里插入图片描述

2.然后基于这个commit id进入rebase模式
git rebase -i 871c44f849b8af50ae2cb3289958336591b97941

如下我要将这些commit合并为一个,将第一个pick下的所有行开头的pick都改成s即可(s表示与上一个commit合并)
在这里插入图片描述
一个一个改显然很麻烦,如何多行同时编辑:

第一步多行同时删除:先将光标移动到要修改的行首,使用ctrl+v快捷键进入VISUAL BLOCK模式,然后使用键盘的上下左右箭头将光标移动到最后一个pick的c后面,然后按d删除所有选中的pick

若操作失误可使用esc退回普通模式,在使用shift+:进入命令模式,输入u回车撤销上一步编辑

在这里插入图片描述

第二步多行同时编辑:光标再移动到要编辑的首行,然后使用ctrl+v快捷键再次进入VISUAL BLOCK模式,将光标向下移动到最后一行行首。shift+i(即大写I)进入编辑模式,此时会自动跳到要操作的第一行,直接输入字符s,然后按esc键 后面的行就同步刷新了。

在这里插入图片描述
最后shift+:进入命令模式输入wq保存。此时会跳转到合并后的commit的信息编辑页面,当前显示的是所有合并commit的信息,看起来很多很乱,我们可以把这些信息全部干掉,然后为这个新commit编写一个简短的提交信息,选择一行开始直接长按d可以快速进行删除,和vim中的编辑其实是一样的
在这里插入图片描述
最终结果如下,然后shift+:进入命令模式输入wq保存

在这里插入图片描述

3.再使用git log命令查看,确认之前那些commit已经合并为一个了

在这里插入图片描述

最后我们再将这个新commit强制push到远程仓库(普通push可能push不上去)

git push origin master --force

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/324039.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32疑难杂症

1.keil的奇怪问题 创建的数组分配内存到0x10000000地址的时候,数据总是莫名其妙的出现问题,取消勾选就正常了 stm32f407内部有一个CCM内存,这部分内存只能由内核控制,任何外设都不能够进行访问。这样问题就来了,如果使用keil5进行编程时勾选了这个选项(下图),则编译的…

Maven 开发环境搭建

Maven介绍 Apahche 软件基金会&#xff08;非营业的组织&#xff0c;把一些开源软件维护管理起来&#xff09; maven apahce的一个开宇拿项目&#xff0c;是一个优秀的项目构建&#xff08;管理工具&#xff09; maven 管理项目的jar 以及jar与jar之间的依赖 maven 可以完成…

新品牌在小红书上宣传推广怎么做?

对于新品牌来说&#xff0c;如何在小红书进行有效的宣传推广&#xff0c;成为了一大挑战。本文伯乐网络传媒将为你揭秘新品牌在小红书上的宣传策略&#xff0c;助你牢牢抓住用户流量&#xff0c;提升品牌知名度。 小红书作为一款以内容为核心的社交电商平台&#xff0c;具有极高…

RK3568 学习笔记 : ubuntu 20.04 下 Linux-SDK 镜像烧写

前言 开发板&#xff1a;【正点原子】ATK-DLRK3568 开发板&#xff0c;编译完 Linux-SDK 后&#xff0c;生成了相关的镜像文件&#xff0c;本篇记录一下 镜像烧写&#xff0c;当前编译环境在 VMware 虚拟机中&#xff0c;虚拟机系统是 ubuntu 20.04 此次烧写还算顺利&#xff…

杨中科 ASP.NETCore Rest

什么是Rest RPC 1、Web API两种风格: 面向过程(RPC) 、面向REST (REST) 2、RPC:“控制器/操作方法“的形式把服务器端的代码当成方法去调用。把HTTP当成传输数据的通道&#xff0c;不关心HTTP谓词。通过QueryString请求报文体给服务器传递数据。状态码。比如/Persons/GetAll…

Linux操作系统基础(10):Linux的特殊权限

1. 特殊权限是什么 在Linux中&#xff0c;特殊权限是指针对文件或目录的特殊权限设置&#xff0c;包括SetUID、SetGID和Sticky Bit。 SetUID&#xff08;Set User ID&#xff09;&#xff1a; 当一个可执行文件被设置了SetUID权限后&#xff0c;当任何用户执行该文件时&#x…

SpringBoot集成 Websocket 实现服务与客户端进行消息发送和接收

介绍 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。 效果 客户端效果 服务端日志 pom依赖 <!-- websocket --> <dependency><groupId>org.springfram…

如何实现安卓端与苹果端互通

在移动应用开发中&#xff0c;如何实现安卓端和苹果端的互通是一个重要的问题。二者缺少一个都会有损失&#xff0c;那如何实现安卓端跟苹果端互通&#xff0c;下面简单的介绍几点方法来帮助你再不同的平台上实现数据交互和功能互通。 基于Web技术 使用Web技术是一种常见并且…

C语言编译器(C语言编程软件)完全攻略(第三部分:Windows下的编译器有哪些?如何选择?)

介绍常用C语言编译器的安装、配置和使用。 三、Windows下的编译器有哪些&#xff1f;如何选择&#xff1f; 安装编译器或者 IDE&#xff08;集成开发环境&#xff09;&#xff0c;也叫搭建开发环境。Windows 下的C语言 IDE 众多&#xff0c;多如牛毛&#xff0c;初学者往往不…

python识别验证码+灰度图片base64转换图片

一、为后面识别验证码准备 1、base64转换为图片&#xff0c;保存本地、并且置灰 上文中的base64,后面的就是包含Base64编码的PNG图像的字符串复制下来 import base64 from PIL import Image import io# 这里是你的Base64编码的字符串 base64_data "iVBORw0KGgoAAAANSUhE…

解决:Microsoft Visual C++ 14.0 is required.

Microsoft Visual C 14.0 is required. Get it with “Microsoft Visual C Build Tools 当我们安装绝大部分python包的时候可以通过pip install 或者 conda install解决&#xff0c;但是任然有些包是安装不了的&#xff0c;比如我的就是在安装pyqt5的时候报Building wheel for…

三、C语言中的分支与循环—for循环 (6)

本章分支结构的学习内容如下&#xff1a; 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句&#xff08;4&#xff09;分支结构 完 本章循环结构的…