一、为什么需要合并多个 commit 呢?
 
有时候,我们开发一个功能。
修修补补 commit 了很多次,过多的 commit 会显得很复杂。
不够直观,不能比较清晰查看那些 commit 是对应的那个功能。
所以,在这种情况下。我们需要整理一下 commit 的记录,让我们更好的管理提交记录。

 

 
二、具体合并多个 commit 的流程。

 
1、development 分支有四次 commit ,然后我准备合并 "add a.php" 和 "add b.php" 的两次 commit。
ps: 使用 git log 命令,查看 commit 记录。
 
2、然后执行命令:
$ git rebase -i d2bf14b495fe57583371be8d0a48c927a2da7eb9 7fc6da429881c5bca2705f61aac0e3a1a3c0b1c7
ps: 命令说明
// -i 的含义是:--interactive, 即弹出交互式的界面让用户编辑完成合并操作
// [startpoint] 指的是合并区间的起点。
// [endpoint] 指的是合并区间的终点,默认是当前分支 HEAD 所指向的 commit。 $ git rebase -i [startpoint] [endpoint] // 注意:这里的区间是一个前开后闭的区间。

ps: Commands 说明,以下单字符命令为简写命令。

  • p, pick: 保留该 commit。
  • r, reword: 保留该 commit,可以修改 commit 的注释。
  • e, eidt: 保留该 commit,但停下来修改该 commit (不仅仅是注释),可以用来解决 merge 冲突。
  • s, squash: 将该 commit 和 前面一个 commit 合并。
  • f, fixup: 将该 commit 和 前面一个 commit 合并,但不保留该提交的注释信息。
  • x, exec: 执行 shell 命令。
  • d, drop: 丢弃该 commit。
 
3、然后,编辑 commit 内容。将 "pick" 改成 "squash" 或者 "s",意思是将该 commit (add b.php)和 前面的 commit (add a.php) 合并。编辑完成后,保存并退出(wq!)。
 
 
4、修改合并之后的 commit 注释。

5、编辑完合并 commit 的注释之后,就保存退出(:wq!)。
 
6、但是,在我们的一顿猛操作之后,我们进入了一个临时的分支(从 development 分支切出来的临时分支)。
 
7、那这个问题怎么解决呢?现在我们来基于这个临时分支,创建一个新的分支 feature/temp。
 
8、然后,我们再切回 development 分支,执行:git rebase feature/temp。
 
 
9、最后,看我们的 commit 记录,就已经把 "add a.php" 和 "add b.php" 的 commit 合并了。
 

三、总结。
  • 这次合并多个 commit,主要用到的命令是:git rebase -i [startpoint] [endpoint]。
  • 合并完成之后,会进入一个临时分支。需要在 development 分支上 rebase 这个临时分支。
  • 我们可以通过 git log 命令,查看提交的记录。
 

巧用 git rebase 合并多个 commit。的更多相关文章

  1. git rebase合并多个commit总结

    git rebase 合并多个commit 方法 在开发过程中,有时一个任务会分几次commit提交,这样可能对于有些分支要cherry pick时会比较麻烦,这是我们可以通过git rebase 将 ...

  2. 巧用 git rebase 将某一部分 commit 复制到另一个分支

    一.为什么需要将一个 commit 复制到其他分支上去呢? 在我们的实际开发的过程中,我们的项目中会存在多个分支. 在某些情况下,可能需要将某一个分支上的 commit 复制到另一个分支上去.   二 ...

  3. git rebase 合并提交

    git rebase 合并提交 合并最近多次提交记录 语法 git rebase -i HEAD~n 1.进入合并模式 合并最近三次提交 git rebase -i HEAD~3 然后你会看到一个像下 ...

  4. Git自动化合并多个Commit

    目录 git rebase逻辑 git editor的修改 处理git-rebase-todo文件 Python实现 当我们有多个commit或者从开源处拿到多个commit时,想合成一个commit ...

  5. git rebase 合并提交 解决超过100M文件的提交不能推送问题

    git log 现在可以看到有3个提交: change 1.mp4 size to small //发现不能推送,又改回小于100M add 1.mp4 big 改变为超过100M add 1.mp4 ...

  6. git rebase -i命令修改commit历史

    [TOC] 修改commit历史的前提 修改历史的提交是可能有风险的,是否有风险取决于commit是否已经推送远程分支,未推送,无风险,如果已推送,就千万不要修改commit了. 修改commit历史 ...

  7. git rebase VS git merge? 更优雅的 git 合并方式值得拥有

    写在前面 如果你不能很好的应用 Git,那么这里为你提供一个非常棒的 Git 在线练习工具 Git Online ,你可以更直观的看到你所使用的命令会产生什么效果 另外,你在使用 Git 合并分支时只 ...

  8. 记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用

    记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用 目录 大文件无法push到远程仓库 问题 commit的大文件无法push到远程库解决办法 git filter ...

  9. git第七节---git merge和git rebase

    # git merge和git rebase 都可以进行分支合并 #git merge 合并后保留记录两个分支的记录 #git rebase合并后会展示成一个分支的记录,另一个分支的提交实际生成了一个 ...

随机推荐

  1. 利用HTML5开发Android笔记(中篇)

    资源来自于www.mhtml5.com 杨丰盛老师成都场的PPT分享 一个很简明的demo 可以作为入门基础 学习的过程中做了点笔记 整理如下 虽然内容比较简单 但是数量还是比较多的 所以分了3篇 ( ...

  2. bzoj 3681 Arietta

    一棵有根树,每个点有一个音高,有 $m$ 中弹奏方法,每种方法可以弹奏 $d$ 子树中音高在 $[l,r]$ 间的音符,每种方法最多弹 $t$ 次 求最多能弹出多少个音符 $n \leq 10000$ ...

  3. Spring转账业务_注解配置事物控制

    1.beans.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...

  4. 杂项之python利用pycrypto实现RSA

    杂项之python利用pycrypto实现RSA 本节内容 pycrypto模块简介 RSA的公私钥生成 RSA使用公钥加密数据 RSA使用私钥解密密文 破解博客园登陆 pycrypto模块简介 py ...

  5. Oracle的启动过程

    在Windows操作系统平台下,可以使用SQL*Plus.OEM和系统服务管理等方式进行数据库的启动与关闭操作.数据库启动分为3个步骤:创建并启动数据库实例.装载数据库和打开数据库.数据库的关闭过程与 ...

  6. git之切换分支出现的问题

    当在其他分支,如test分支开发的时候,新增了文件夹等目录结构.开发完成后,切换会master分支. 如果出现“Deletion of directory '***' failed. Should I ...

  7. springboot实现定时任务的一种方式

    参考:https://www.yoodb.com/news/detail/1205 目前觉得这种还是很好用,所以就记录. 最好新建一个项目测试: 1. pom中添加 <dependency> ...

  8. postgresql 数据库,模式,表空间的关系

    数据库与模式模式(schema)是对数据库(database)逻辑分割在数据库创建的同时,就已经默认为数据库创建了一个模式--public,这也是该数据库的默认模式.所有为此数据库创建的对象(表.函数 ...

  9. C# Lambda快速深度拷贝

    背景:今天上班在班车上和一个同事讨论有关C#拷贝效率的问题,聊到了多种深度拷贝方法,其中就提到了一种Lambda表达式拷贝的方法,这位同事说这种深度拷贝快是快但是如果对象里面再嵌入对象就不能深度拷贝了 ...

  10. django的settings.py设置static

    DEBUG = True ################ STATICFILES ################ # A list of locations of additional stati ...