git rebase -i合并多次提交的实现

简介

在日常开发中,代码变更比较频繁,有时候想让前几次提交的合并为一次提交,这里可以使用git rebase -i 命令来完成,当然,git rebase命令不仅仅用于合并提交,它还有许多用处,比如可以使用git rebase onto将某一段commit粘贴到另一个分支上等等,这里主要介绍合并提交。

命令介绍

rebase为变基
git rebase -i 命令可以压缩合并多次提交
格式:git rebase -i [startpoint] [endpoint]

其中-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。

在查看git的log后,可以使用如下命令

// 合并从当前head到15f745b(commit id)
git rebase -i 15f745b
或:
// 合并最近的两次提交
git rebase -i HEAD~2

执行这个命令后会跳到一个vi编辑器

里面的提示有:

  • pick:保留该commit(缩写:p)
  • reword:保留该commit,但我需要修改该commit的注释(缩写:r)
  • edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
  • squash:将该commit和前一个commit合并(缩写:s)
  • fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
  • exec:执行shell命令(缩写:x)
  • drop:我要丢弃该commit(缩写:d)

实操

这里在终端输入: git rebase -i HEAD~2 这里的 HEAD~2 表示合并最近两次的提交, 如果想合并最近三次的提交修改为: git rebase -i HEAD~3

需要做的是,将第二行的 pick 改为 s, “s” 为 “squash” 的缩写,“squash” 的意思是将这个提交压缩为最后一次提交

保存后弹出这样的

将 This is the commit message #2 下面的内容改成你想提交的概述即可

最后保存退出即可

到此这篇关于git rebase -i合并多次提交的实现的文章就介绍到这了,更多相关git rebase -i合并多次提交内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • git分支的创建、切换、合并及删除操作小结

    一.查看现存分支 查看现存分支 : git branch命令; git branch 从结果可以看出, 现在只有一个分支master; 二.创建分支 创建分支 : git branch 分之名称, 就可以创建一个分支, 创建完分支以后可以查看分支, 当前使用的分支会显示成为绿色, 前面带有 "*" , 如果不是当前使用的分支, 显示的是白色, 并且没有 "*" 前缀; git branch branch1 三.切换分支 切换分支 : git checkout 分支名

  • Ruby实现的删除已经合并的git分支脚本分享

    使用Git管理代码工程,着实方便了很多,但是当做完feature分支或者完成hotfix之后,总是忘记删除这些无用的分支,一个一个地删除着实麻烦,重复手工劳动不符合程序员的风格,于是写了一个简单的脚本.一键删除那些不需要的分支,让多余的干扰信息离开视线. 删除哪些分支? 删除的为Merge(合并)操作的源分支.如果工程正在处于分支A(HEAD为A分支),分支B已经合并到了分支A,即A分支包含了B分支的内容,则会删除B分支. 代码 复制代码 代码如下: #!/usr/bin/env ruby #

  • 详解git合并冲突解决方法

    1.git merge冲突了,根据提示找到冲突的文件,解决冲突 如果文件有冲突,那么会有类似的标记 2.修改完之后,执行git add 冲突文件名 3.git commit 注意:没有-m选项 进去类似于vim的操作界面,把conflict相关的行删除掉 4.直接push就可以了,因为刚刚已经执行过相关merge操作了 相关的操作如下 冲突产生 [root@Monitor Demo]# git branch #当前在master分支下 * master psr/psr-01 psr/psr-02

  • 详解git的分支与合并的两种方法

    如何将两个分支合并到一起.就是说我们新建一个分支,在其上开发某个新功能,开发完成后再合并回主线. 1.   git merge 咱们先来看一下第一种方法 -- git merge 在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点.翻译成自然语言相当于:"我要把这两个父节点本身及它们所有的祖先都包含进来."下面具体解释. # 创建新分支 bugFix git branch bugFix # 切换到该分支 git checkout bugFix # 提交一次 git c

  • Python如何使用Gitlab API实现批量的合并分支

    这篇文章主要介绍了Python如何使用Gitlab API实现批量的合并分支,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.需求:每次大批量上线完成后,都会进行将hotfix合并到Master,合并到test/uat等等重复操作(上线发布后自动合并master已完成). 2.现实:在完成发布后自动合并master后,可能还有的项目人员忘记合并到其他分支的情况,so #!/usr/bin/python3 #coding=utf-8 # 自动合

  • git rebase -i合并多次提交的实现

    简介 在日常开发中,代码变更比较频繁,有时候想让前几次提交的合并为一次提交,这里可以使用git rebase -i 命令来完成,当然,git rebase命令不仅仅用于合并提交,它还有许多用处,比如可以使用git rebase onto将某一段commit粘贴到另一个分支上等等,这里主要介绍合并提交. 命令介绍 rebase为变基 git rebase -i 命令可以压缩合并多次提交 格式:git rebase -i [startpoint] [endpoint] 其中-i的意思是–intera

  • git rebase -i 修改历史提交的方法

    git rebase -i 修改历史提交 commit 3 add 22222 commit 2 add 11111 commit 1 create file 有如上三次提交,发现第二次提交有失误,准备修改第二次提交. git log –oneline 查看head f206555 add 2222 572a41e add 1111 c195175 feat:create file git rebase -i c195175 回到第一次提交的基础上 进入命令模式 选择进行edit 此时已经回到第

  • 解决使用commit提交大文件无法推送到远程库问题及git rebase使用详解

    解决这个问题并没有特别的(删除提交历史中某个文件,然后重新push),但是由于开始的使用失误,中间有使用git rebase和git reset命令处理,所以特此记录下 大文件无法push到远程仓库 问题 首先,故事(事故)的起因是这样的. 某次git push(类似测试使用,没有分支)到远程仓库时发生如下无法提交大文件的报错(大文件是一个pdf文件) $ git push Enumerating objects: 204, done. Counting objects: 100% (204/2

  • 详解git merge 与 git rebase的区别

    前言 其实这个问题困扰我有一段时间,相信也有人和我一样有这个困扰,网上已有很多这种解释了,但是要么就是无图,要么就是解释的很乱,没太看懂,经过自己对git的使用,加上向同事请教,算是理解了这个问题,所以写下来分享一下,我尽量详细说明 merge与rebase的区别 假设我们有如下图一所示仓库,该仓库有master和develop两个分支,且develop是在(3.added merge.txt file)commit处从master拉出来的分支. merge 假设现在HEAD在(6.added

  • Git的代码合入流程详解

    目录 总述 Rebase解决冲突 适用情况 操作方式 Squash解决冲突 适用情况 操作方式 Merge执行合入 总述 代码合入流程用于减轻代码合入复杂度.简化主分支历史(具有线性的历史).保证合入代码对主分支的HEAD有效.代码合入分为两步 解决冲突:将需要合入的分支变基到目标分支之上.保证合入代码对目标分支的HEAD有效.此时会解决所有代码冲突. 执行合入:向目标分支提交merge请求,执行合入CI后完成合入. 其中第一步“解决冲突”的方法分为两种种情况: Squash.如 feature

  • Git rebase命令使用实战

    一.前言 一句话,git rebase 可以帮助项目中的提交历史干净整洁!!! 二.避免合并出现分叉现象git merge操作 1.新建一个 develop 分支 2.在develop分支上新建两个文件 3.然后分别执行 add.commit.push 4.接着切换到master分支 分别添加c.txt 和 d.txt两个文件,分别进行add.commit.push 5.现在想把develop分支上开发的部分合并到master分支上 6.git merge 会将master和develop合并的

  • git rebase 成功之后撤销的操作方法

    rebase在git中是一个非常有魅力的命令,使用得当会极大提高自己的工作效率:相反,如果乱用,会给团队中其他人带来麻烦.它的作用简要概括为:可以对某一段线性提交历史进行编辑.删除.复制.粘贴:因此,合理使用rebase命令可以使我们的提交历史干净.简洁! 下面看下git rebase 成功之后如何撤销,感兴趣朋友看下. git rebase 过程中可以使用git --abort/--continue来进行操作,成功之后如何撤销呢? 首先执行git reflog查看本地记录 可知本次rebase

  • 一不小心git rebase后出现(master|REBASE 1/10)的问题及解决办法

    有时候在向服务器git push origin master的时候会出现失败的现象.它是这样的 然后呢,我在百度上历经千辛万苦,找到了解决的方法. 他说是因为远程仓库和本地仓库文件冲突,使用git pull --rebase origin master(拉取远程的文件把本地的覆盖,再上传).然后再进行push,我这天真的小白,就深信不疑地使用了.第一次还真的成功了.还提交上去了.但是好景不长,我再次使用的时候(也可能是命令记错了),就变成了这样 然后我git status,他是这样的 不仅这样,

  • Git远程删除某个历史提交记录方法详解

    目录 引言 一.删除最后一次提交 二.删除指定commit提交(非最后一次提交) 引言 在开发中经常会遇到在本地测试的代码或者隐私信息,一不小心提交到了远程仓库,即便立即删除了再提交,但是上次的提交记录在远程依旧可以查看. 特别是像账号密码.key文件这种,很可能造成隐私泄露. 分两种情况: 一.删除最后一次提交 这种情况比较简单,主要操作分两步: 第一步:回滚上一次提交 git reset --hard HEAD^ 第二步:强制提交本地代码 git push origin master -f

  • 解决Git Revert 再次合代码无效问题

    目录 背景 Demo复现该问题 用Squash方式解决该问题 小结 背景 将开发分支dev合并进主分支main以后,如果发现bug需要回滚代码时,我们常使用git revert完成操作,但是当我们将dev上的bug修复之后想再把它合进main却会发现,dev上的功能代码合不进去了,原因是这些功能代码的commit已经在main分支上了(虽然被revert了,但仍在),所以git会拒绝合进重复的commit. 本人最近就遇到了这种问题场景,查阅网上资料推荐的做法一般是把main之前的revert再

随机推荐