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

Git通过rebase合并多个commit

在使用 Git 作为版本控制的时候,我们可能会由于各种各样的原因提交了许多临时的 commit,而这些 commit 拼接起来才是完整的任务。那么我们为了避免太多的 commit 而造成版本控制的混乱,通常我们推荐将这些 commit 合并成一个。

1. 查看提交历史 git log

首先你要知道自己想合并的是哪几个提交,可以使用 git log 命令来查看提交历史,假如最近 4 条历史如下:

commit 3ca6ec340edc66df13423f36f52919dfa3......commit 1b4056686d1b494a5c86757f9eaed844......commit 53f244ac8730d33b353bee3b24210b07......commit 3a4226b4a0b6fa68783b07f1cee7b688.......

历史记录是按照时间排序的,时间近的排在前面。

2. git rebase

想要合并 1-3 条,有两个方法

从HEAD版本开始往过去数3个版本

git rebase -i HEAD~3

指名要合并的版本之前的版本号

git rebase -i 3a4226b

请注意 3a4226b 这个版本是不参与合并的,可以把它当做一个坐标

3. 选取要合并的提交

执行了 rebase 命令之后,会弹出一个窗口,头几行如下:

pick 3ca6ec3   '注释**********'pick 1b40566   '注释*********'pick 53f244a   '注释**********'

将 pick 改为 squash 或者 s,之后保存并关闭文本编辑窗口即可。改完之后文本内容如下:

pick 3ca6ec3   '注释**********'s 1b40566   '注释*********'s 53f244a   '注释**********'

然后保存退出,Git 会压缩提交历史,如果有冲突,需要修改,修改的时候要注意,保留最新的历史,不然我们的修改就丢弃了。修改以后要记得敲下面的命令:

git add .  git rebase --continue  

如果你想放弃这次压缩的话,执行以下命令:

git rebase --abort  

如果没有冲突,或者冲突已经解决,则会出现如下的编辑窗口:

# This is a combination of 4 commits.  
#The first commit’s message is:  
注释......
# The 2nd commit’s message is:  
注释......
# The 3rd commit’s message is:  
注释......
# Please enter the commit message for your changes. Lines starting # with ‘#’ will be ignored, and an empty message aborts the commit.

输入 wq 保存并推出, 再次输入 git log 查看 commit 历史信息,你会发现这两个 commit 已经合并了。

通过IDEA或者GOLAND便捷式操作 https://blog.csdn.net/huangjhai/article/details/109557946

http://www.lryc.cn/news/234690.html

相关文章:

  • ROS 学习应用篇(八)ROS中的坐标变换管理之tf广播与监听的编程实现
  • 计算机算法分析与设计(23)---二分搜索算法(C++)
  • 前置语音群呼与语音机器人群呼哪个更好
  • 『Element Plus の 百科大全』
  • P3879 [TJOI2010] 阅读理解- 字典树
  • upgrade k8s (by quqi99)
  • CronExpression
  • 释放机器人潜力,INDEMIND深耕底层技术
  • 【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!
  • 流量2----2
  • 人工智能发展前景
  • 编写程序,要求输入x的值,输出y的值。分别用(1)不嵌套的if语句(2)嵌套的if语句(3)if-else语句(4)switch语句。
  • AcWing 4520:质数 ← BFS
  • 00、计算机视觉入门与调优简介
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • 多媒体ffmpeg学习教程
  • SELinux零知识学习十五、SELinux策略语言之客体类别和许可(9)
  • OpenSign:安全可靠的电子签名解决方案 | 开源日报 No.76
  • Linux | 进程间通信
  • Vue.js正式环境中配置多个请求的URL
  • 简单的 UDP 网络程序
  • 人工智能-深度学习之文本预处理
  • 【Java 进阶篇】插上翅膀:JQuery 插件机制详解
  • 手动编译GDB
  • 竞赛选题 深度学习花卉识别 - python 机器视觉 opencv
  • 替换SlowFast中Detectron2为Yolov8
  • 轻量化网络--MobileNet V1
  • gittee启动器
  • Spark数据倾斜_产生原因及定位处理办法_生产环境
  • 2023OceanBase年度发布会后,有感