使用Git rebase合并多条提交记录commit。以及使用 git commit amend本地提交直接合并到远程已有commit的用法

2023-10-27

需求场景一 :
对某个小的功能点进行多次反复的修改提交,且已经提交到远程,导致commit记录过多,太过于杂乱无章,想要精简合并一些提交记录。

场景还原:
比如下图4个git commit记录,log1-log4,需要将他们合并成一个提交记录

在这里插入图片描述
解决方案:

  1. 要处理的是log1-log4 这四条commit记录。
  2. 选中log1之前一条commit的commit id,也就是图中最下面这条。e65b97e332c0683631c334b870e0ceb062163815
  3. 使用 git rebase 进入vim编辑器
 git rebase -i e65b97e332c0683631c334b870e0ceb062163815

在这里插入图片描述

4.进入vim编辑器之后,单击 i 按键 进入编辑模式,这是最下方会出现-- INSERT --标识表示我们进入了编辑模式。
在这里插入图片描述
5. Commands 可以看到我们可以使用的命令以及缩写以及每个命令的缩写。这次要使用的命令的是pick和squash。
6.这时候最上方4个commit log1-log4的前面都是pick,移动光标将log2-log4前面的pick改为s(或者squash)
在这里插入图片描述
7. 编辑完毕之后,点击esc 然后按住 shift+";“双引号, 最底下出现冒号, 然后输入wq 回车 保存。
8. 这时候就能看到 我们之前提交的4个 commit 的 信息, 你可以选择在不要的message前面加个#号 表示忽略掉这条信息,一般来说去掉几个不要的,只保留一个进行编辑或者保持原始状态。比如 我在log1 3 4 前面加个#号表示忽略,对log2进行编辑 。(这里依然要点击i 进入编辑模式。)
在这里插入图片描述
9.编辑完之后的效果如下,我想要提交的合并信息就是"meger log1-4”,
重复上面的步骤 保存退出。esc=>:wq

在这里插入图片描述
10.如果成功会有一行提示

Successfully rebased and updated refs/heads/feature/git-test.

如果失败 可以使用 git rebase --continue 进入vim编辑器重新操作。
如果想要放弃这次编辑 可以使用git rebase --abort 命令中止本次操作。
11. 最后使用命令 git push -f 强制推送,大功告成。在这里插入图片描述

需求场景二 :
对于已有一个提交记录push到远程, 但你本地目前有一点小的修改,想再推送到远程,但不想再生成一个提交记录,使得commit记录过多,且不想更改已有的commit message。
比如下图 有一个提交 my first commit commitId是7b3b6ada 时间是 16:47
在这里插入图片描述
解决方案 :
1.git add . 将要更改的代码提交。
2. 这时候 可以使用 git amend进行合并代码

git  commit --amend --no-edit

在这里插入图片描述
3.最后强推到远程

git push -f
  1. 查看效果 git log。我们可以发现 提交时间和message没变,但是 commitId 从7b3b6ada 变成了3ac2a2d。
    在这里插入图片描述
    5.⚠️注意 这个方法只适合只有一个开发者 或者自己单独一个开发分支的时候使用, 否则有可能会覆盖别人的代码,慎用 慎用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Git rebase合并多条提交记录commit。以及使用 git commit amend本地提交直接合并到远程已有commit的用法 的相关文章

  • 无法访问 Github 403 错误:权限被拒绝

    我是 Git Github 的新手 所以请原谅我的困惑 问题是 我刚刚对本地存储库进行了更改 并且想推送到 Github 上的原点 特别是 gh pages 之前 我一直在使用另一个 Github 帐户 因此我更改了 user name 和
  • git Push Remote:警告:hooks.mailinglist 有多个值

    我刚刚从使用 gitosis 升级到 gitolite 电子邮件通知适用于所有存储库 但对于 gitolite admin 存储库 我在推送时收到此警告 推送很好 git push remote warning hooks announce
  • Git:repo 包含一个空目录 - 会发生什么?

    Git 跟踪文件 而不是目录 https stackoverflow com questions 5091017 和我们目前不能add空目录 https stackoverflow com questions 11600188 The 标准
  • 如何仅对最新合并后的提交进行变基?

    考虑以下场景 我从master那里检查了一个分支 我做了一些承诺 我合并了更新的master 我做了更多的承诺 现在我想要从第 4 点开始变基提交 以便从第 2 点开始的提交不受影响 所以如果我最初有 1 2 x x x x x x x m
  • Git合并策略:空格使默认显示不冲突并带来意想不到的结果

    经过多次试验 我得到了这个简单的测试用例场景 a gt b gt c master gt d gt b gt e branch Where b 是樱桃精选b e is a merge from master b 之后完成c and c对相同
  • 将 git dcommits 切换到 svn 分支

    I had master dcommit到 和rebase来自 颠覆trunk 我创建了一个中间 Subversion 分支tc 合并来自 2 个不同分支的更改 使用 git branch master git svn branch tc
  • 如何使用和理解wso2 git仓库?

    我刚刚开始对wso2感兴趣 我正在寻找移动设备管理解决方案 所以我测试了 wso2 EMM 但我发现了一些限制 我想知道是否可以自己实现 我的问题是我完全迷失在 wso2 git 存储库中 有没有我错过的指导书或逻辑 如果有人帮助我解决这个
  • 为什么我使用某些 git 命令后终端变得无响应?

    我经常 真的每次 使用该命令后git log我的终端对进一步的输入没有响应 这是在 OSX 上 是否有一个我不知道的命令将使终端再次激活 而不是仅仅退出终端并重新开始 您正在使用一个无需滚动即可显示日志的程序 很可能less 可以通过按q
  • Git 合并删除文件

    这是第二次发生这种情况 当我进行合并时 我后来意识到正在合并的分支中的一些文件不再位于正在合并的分支中 最新的例子是我们有一个功能分支 我一直在合并主开发分支中的更改 合并后我们丢失了很多文件 并且它们现在不存在于功能分支中 为什么会出现这
  • 在单独的终端屏幕上显示 git diff 和 git log 输出

    设置新的开发环境后 我遇到了一个奇怪的 git 行为 我不记得过去见过 我习惯于git diff and git log在终端中创建一个新屏幕并在其中显示其输出 什么less默认情况下 我用它作为我的寻呼机 然后我可以退出并返回到之前的终端
  • 目标路径已存在且不是空目录

    我克隆了一个 git 存储库 但不小心弄乱了 所以我重新克隆并显示消息 目标路径已存在且不是空目录 我尝试过删除 Mac 中带有目标路径名称的文件夹 但没有成功 我对编码非常陌生 因此我们将不胜感激 对于根文件夹 以及任何其他文件夹 对于那
  • 为什么 git 无法识别我的本地存储库?

    我刚刚回到一个我已经使用 Git 大约 6 个月的项目 看到了这个 cd d DEVELOP BlenderAe My repo root git status fatal not a git repository or any of th
  • Azure Devops Pipeline YAML 中的 Git 标记名称

    Summary 如何获取 Azure Devops Pipeline YAML 文件中当前 git 标签的名称 我想做什么 我正在 Azure Devops 中设置构建管道 创建新的 git 标签时会触发管道 然后我想构建 docker 镜
  • “git merge --squash”的正确用例是什么?

    有些人喜欢git merge squash由于以下原因 压缩到单个提交使您有机会清理混乱的 WIP 提交 并为您要合并的更改提供良好的理由 https coderwall com p qkrmjq git merge squash http
  • 合并多个 git 存储库

    假设我有一个看起来像这样的设置 phd code phd figures phd thesis 由于历史原因 这些都有自己的 git 存储库 但我想将它们合并为一个 以稍微简化事情 例如 现在我可能会进行两组更改 并且必须执行类似的操作 c
  • 仅将单个文件放入 git 子模块/存储库中

    我在 git 源代码存储库中有一个特定文件 其中包含生产设置 密码 我想限制此文件 以便只有制作团队的成员才能看到它 但是 我想控制它的变化 我考虑过在 git 中使用子模块 然后限制对新存储库的访问 然而 git 似乎需要子模块的整个子目
  • 无法从另一台计算机访问 git 分支

    基本上我看不到另一台计算机上的分支 我跑 git branch a 在家用电脑上我得到 C learn ror sample app filling in layout gt git branch a filling in layout m
  • Windows 上的 git 忽略文件名大小写更改 [重复]

    这个问题在这里已经有答案了 我有一个reactjs应用程序 我正在将所有文件名标准化为小写以符合Nodejs 最佳实践 https devcenter heroku com articles node best practices stic
  • 名称和电子邮件在 Git 的每用户配置文件中设置,但 Git 仍使用默认生成的名称和电子邮件

    标题已经说了 但我会更彻底地解释一下 我已使用以下命令按照建议配置了用户名和电子邮件 git config global user name git config global user email 我可以通过执行以下操作来验证这是设置的g
  • 使用 Git 在线使用 TFS 的 Visual Studio 2013:自动保存文件签入

    我目前正在将 Visual Studio Premium 2013 Update 3 与 Team Foundation Server Online 结合使用并使用 Git 存储库 直到最近 我已经成功使用 Git Repo 几个月了 现在

随机推荐

  • 浅谈IPv4协议与IPv6协议的区别

    浅谈IPv4协议与IPv6协议的区别 咱们先了解下什么叫IPv4协议和IPv6协议 IPv4 是互联网协议 Internet Protocol IP 的第四版 应属第一个被广泛应用 构成现阶段互联网技术的基础的协议 1981年 Jon Po
  • 生命在于研究——ensp配置旁挂三层组网示例【OSPF+两个无线网络WPAPSK认证+DHCP】

    ensp配置旁挂三层组网示例 OSPF 两个无线网络WPAPSK认证 DHCP 一 业务需求 1 路由使用OSPF Vlan的网关配置在LSW1上 2 WLan采用三层组网 AC旁挂模式 3 创建两个无线网络 分别为ycu和guest 其中
  • 利用 vant 封装精确到秒的时间选择器,让 vue 开发更简单

    前言 在移动开发中 时间选择的控件比比皆是 但却鲜有类似的组件可以精确到秒级别的 官方可能是考虑到小屏幕手机的显示问题 也可能是使用的场景寥寥无几 但是少不代表没有 所以最近花了点时间基于 vant 组件库封装了一个可以精确到秒级别的时间选
  • MFC关于Radio按钮的操作

    基础介绍 radio button通常都是成组使用的 在一组里面是互斥的 分组的原则是 1 首先将RadioButton控件定好Tab顺序 具体方法 工具栏 格式 gt Tab键顺序 选项选中 然后按照预定的顺序依次点击对话框上面的Radi
  • shell脚本中执行kill进程

    继上一篇文章 只是在linux中用命令行中操作 之后我实战在shell脚本中 发现问题累累 在shell中kill掉程序写的命令 ps ef grep pid grep v grep awk print 3 执行shell脚本 运行结果 s
  • sqli-labs靶场(1-22关)

    目录 第一关 第二关 第三关 第四关 第五关 盲注 第六关 盲注 第七关 报错盲注 第八关 时间盲注 第九关 时间盲注 第十关 时间盲注 第十一关 报错 第十二关 第十三关 第十四关 第十五关 布尔类型盲注 第十六关 第十七关 update
  • Java POI实现Excel导出

    ExcelFormatUtil样式工具类 package com ymf invoice common utils import org apache poi hssf util HSSFColor import org apache po
  • hive总结回顾

    UDAF 继承UDAF 内部定义一个静态类 实现UDAFEvaluator接口 实现init iterate terminatePartial merge terminate五个方法 编写代码完成后install打包 Rz bye 上传到本
  • VUE 使用el- upload上传视频获视频的时长传递给后端问题解决

    近期做项目遇到了需要从前端传递视频到服务器 然后需要获取视频时长 此处几年一下 audioElement addEventListener loadedmetadata function duration parseInt audioEle
  • (大集合)可供选择的软件开源协议的罗列

    Public License List 罗列各种开源代码的公共协议以供选择 具体每一个协议的含义可以另外找教程文章或看官网原文 这里解决 都有什么 的问题 List of licenses that can be chosen 注 在 Gi
  • 蓝桥杯官网练习题(旋转)

    题目描述 图片旋转是对图片最简单的处理方式之一 在本题中 你需要对图片顺时针旋转 90 度 我们用一个 n m 的二维数组来表示一个图片 例如下面给出一个 3 4 的 图片的例子 1 3 5 7 9 8 7 6 3 5 9 7 这个图片顺时
  • Jenkins的简单使用,小白式教程

    1 什么是 CI CD CI CD 的核心概念可以总结为三点 持续集成 持续交付 持续部署 代码上线流程 拉取代码 gt 构建 gt 测试 gt 打包 gt 部署 1 1 CI Continuous Integration CI CD 中的
  • 【区块链2.0实战学习笔记】————1、区块链基础

    前言 本系列是对 区块链2 0实战 书籍的研读记录 对一些重要的 核心的点进行记录和梳理 1 1 什么是区块链 1 1 1 区块链定义 1 1 2 区块链的运行流程和特点 1 1 3 区块链的类型 1 2 区块链的发展经过和现状 1 2 1
  • 各种数据库查询前几条数据

    1 Oracle数据库SELECT FROM TABLENAME WHERE ROWNUM lt N2 Infomix数据库SELECT FIRST N FROM TABLENAME3 DB2数据库SELECT FROM SELECT RO
  • 普通协议(HTTP)与安全协议(HTTPS)

    客户端与服务器端 CydiaSubstrate框架 Frida Native层HOOK Frida hook Java层 需要相关资料的朋友 可以 加入此处即可打包获取 一 HTTP协议简介 HTTP协议 超文本传输协议HyperText
  • 启动主机服务器上虚拟机吗,启动主机服务器上虚拟机

    启动主机服务器上虚拟机 内容精选 换一换 主机迁移服务是一种P2V V2V迁移服务 可以帮您把X86物理服务器或者私有云 公有云平台上的虚拟机迁移到华为云弹性云服务器上 从而帮助您轻松地把服务器上的应用和数据迁移到华为云 主机迁移服务的工作
  • java设计模式桥接模式最详细讲解,从设计卷到开发看源码

    为什么要使用设计模式 说到底还是为了程序拓展和移植性 无法就是那几种设计思想 单一职责原则 开闭原则 里氏替换原则 依赖倒置原则 接口隔离原则 组合复用原则 迪米特法则这些思想和原则就是为了帮助我们更好规范的写出简洁 高效易拓展的程序 原理
  • 【sklearn第二十一讲】矩阵分解问题

    机器学习训练营 机器学习爱好者的自由交流空间 入群联系qq 2279055353 主成分分析 精确主成分 主成分分析 Principal component analysis PCA 通常用来分解一个多变量数据集成为逐次正交的成分 这些成分
  • STM32学习笔记(一):输出PWM——HAL库

    文章目录 前言 一 PWM是什么 二 实例 PWM输出 2 代码 3 现象 3 总结 前言 本篇文章为个人参考总结所用 如果错误还望指出 涉及的知识 1 STM32CubeMx的部分使用 2 PWM原理及常用概念 3 用单片机生成一定频率的
  • 使用Git rebase合并多条提交记录commit。以及使用 git commit amend本地提交直接合并到远程已有commit的用法

    需求场景一 对某个小的功能点进行多次反复的修改提交 且已经提交到远程 导致commit记录过多 太过于杂乱无章 想要精简合并一些提交记录 场景还原 比如下图4个git commit记录 log1 log4 需要将他们合并成一个提交记录 解决