一、为什么需要合并多个 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. Git和Github使用说明

    1. 安装 官网地址:https://git-scm.com/downloads 我这里使用的是git version 2.19.1.windows.1,全程傻瓜式安装,点下一步即可,可以把命令模式和 ...

  2. 正确设置Linux的ulimit值的方法

    学习swoole的时候有一个max_conn参数, max_conn 描述:服务器允许维持的最大TCP连接数 说明:设置此参数后,当服务器已有的连接数达到该值时,新的连接会被拒绝.另外,该参数的值不能 ...

  3. 蓝桥杯 基础训练 BASIC-27 2n皇后问题

    基础练习 2n皇后问题   时间限制:1.0s   内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都 ...

  4. Java基础--单例类创建和测试

    单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在.单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间:能够避免由于操作多个实例导致 ...

  5. (转)heX——基于 HTML5 和 Node.JS 开发桌面应用

    本文转载自:http://techblog.youdao.com/?p=685 简介:heX,一个允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.是你开发 ...

  6. Linux网络工具lsof和netstat

    lsof全名为list opened files,即列举系统中已经被打开的文件,基本使用如下: (1) 查看/etc/passwd使用情况 lsof /etc/password (2) 查看监听的so ...

  7. CountDownLatch的介绍和使用

    1.类介绍 java.util.concurrent 类 CountDownLatch java.lang.Object java.util.concurrent.CountDownLatch 一个同 ...

  8. VMware安装操作系统(Operating System not found一个错误原因)

    因为指定的IOS文件是多种操作系统的组合,如Win7(32位和64位完全版),那么安装的时候选择一个操作系统类型和ios文件的类型就匹配不上,所以出现这种错误.

  9. suse 源的添加与删除,以及源地址

    地址 一个是上海交大的,http://ftp.sjtu.edu.cn/opensuse/update/ 葡萄牙的: http://ftp.nux.ipb.pt/pub/dists/opensuse/u ...

  10. 没有dig命令的结觉方法

    -bash: dig: command not found rpm -qa bind-utils 查看没有没安装 bind-utils 包 yum install -y bind-utils 解决