想要获取更多文章可以访问我的博客 - 代码无止境

在日常的开发过程中,我们一个功能可能会有很多次提交。而且我们公司的开发是不允许直接往公司仓库提交代码,所以需要fork到自己的仓库然后merge过去,这样就会导致拉代码会产生很多的commit,而这些commit其实是没有什么实际意义的。提交记录过多会导致代码review非常困难,那么今天我们就来介绍一个非常实用的命令 - git rebase,它可以将若干次提交合并成一个提交,下面我们就一起来见证一下这个骚操作吧。

准备

首先我们需要准备一个前提环境:

1.初始化一个git仓库。

mkdir git-test
cd git-test
git init

2.创建一个README.md文件。

3.创建若干个提交(>1)。

我们执行git log命令会得到如下结果,一共有三次提交记录,我们将通过git rebase命令将后两个提交合并成一个commit:

$ git log
commit 8d27ccf975e5ce4af8fd12fa75534b78fdc5b065 (HEAD -> master)
Author: 码无止境 <gancy.programmer@gmail.com>
Date:   Sun Jun 16 18:00:57 2019 +0800     第三次提交 commit c953ae97af01e49d7f0ad959b42b91334a6726f3
Author: 码无止境 <gancy.programmer@gmail.com>
Date:   Sun Jun 16 18:00:30 2019 +0800     第二次提交 commit 53407186cedef4be98d6001a69ee33d3a8d745fc
Author: 码无止境 <gancy.programmer@gmail.com>
Date:   Sun Jun 16 18:00:06 2019 +0800     第一次提交

合并提交记录

1.首先我们执行git rebase -i HEAD3,这里的HEAD2代表的合并最近两次提交,命令执行后会进入到一个vi编辑页面,如下所示:

2.编辑之后的内容为:

p c953ae9 第二次提交
s 8d27ccf 第三次提交

3.编辑好后,保存(:wq)

4.然后会进入到一个编辑提交信息的界面(vi编辑),我写的”合并提交”,我们看最后合并提交的时间和第二次提交的时间一直,代表上面的合并是将第三次提交合并到了第二次提交。

5.保存消息后就执行成功了,我们再执行以下git log命令查看,会发现如下效果

$ git log
commit b1ab9f0af528aa96c333b2287c85d06e9fea891b (HEAD -> master)
Author: 码无止境 <gancy.programmer@gmail.com>
Date:   Sun Jun 16 18:00:30 2019 +0800
    合并提交     第二次提交     第三次提交 commit 53407186cedef4be98d6001a69ee33d3a8d745fc
Author: 码无止境 <gancy.programmer@gmail.com>
Date:   Sun Jun 16 18:00:06 2019 +0800     第一次提交

合并时的几个命令介绍

  • pick:正常选中
  • reword:选中,并且修改提交信息;
  • edit:选中,rebase时会暂停,允许你修改这个commit
  • squash:选中,会将当前commit与上一个commit合并
  • fixup:与squash相同,但不会保存当前commit的提交信息
  • exec:执行其他shell命令

Git小技巧之使用Rebase命令合并提交的更多相关文章

  1. Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具

    前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...

  2. Git 小技巧

    分享git的几个小技巧,后面会根据使用补充.目前包括git撤销本地修改.git回退到前n个版本.git多用户提交冲突解决.git 命令简化.欢迎大家补充^_* 1.git撤销本地修改 git rese ...

  3. git小技巧--如何从其他分支merge个别文件或文件夹

    在实际工作中,一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,进行分别开发. 创建分支 功能分为2个分支,分别为A.B. A上面有个列表页功能 B上面有个详情 ...

  4. Python小技巧:使用一行命令把你的电脑变成服务器

    不知道你有没有遇到这么一种情况,就是你有时候想要把电脑上的一些东西传输到你的手机或者 Pad ,你要么需要使用数据线连接到电脑,有时候还要装各种驱动才可以进行数据传输,要么需要借助第三方的工具,在局域 ...

  5. git小技巧--提取/合并某分支的部分文件

    软件开发基本都是多个feature分支并行开发,而在上线前有可能某个分支的开发或测试还没有完成,又或者是产品调整,取消了该分支功能的上线计划,我们在release前不合并该分支即可,然而如果该分支中的 ...

  6. git小技巧之分支、关联远程仓库、回滚、解决.gitignore不生效等

    1.分支管理 新建并切换分支:git checkout -b <name>新建本地分支并关联到远程分支git checkout -b myRelease origin/Release合并某 ...

  7. Git小技巧:VIM中如何填写注释信息

    使用Git命令行工具的时候,经常一不小心就进入VIM界面,例如git commit没有填写任何描述信息.对于习惯了Windows可视化操作界面的用户,可能一下子会觉得无所适从,只能在键盘上一顿短按.下 ...

  8. Git 使用技巧(一):合并分支

    在合并分支之前最好保证你所有的分支都是最新的,所以你可以使用 git pull origin branchName 来拉取远程仓库到本地仓库. 假如有一个 dev 分支需要合并到 master 分支中 ...

  9. 【转载】运维小技巧:使用ss命令代替 netstat

    转自:https://www.91ri.org/12470.html ss是Socket Statistics的缩写. 顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类 ...

随机推荐

  1. DB First .edmx

    DB First查看Entity相互关系.edmx 图表     .edmx源代码——xml文件右键,打开方式     xml内容     详细查看DB:.edmx—Model Browser(模型浏 ...

  2. EF context.SaveChanges()特点

    EF context.SaveChanges()特点 1 一次连接保存多条数据(工作单元模式): 2 内部通过事务来执行,如果一条数据保存失败,执行回滚操作: 3 延时加载 var userList= ...

  3. ASP UserInfoList 方法1

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserInfoList.a ...

  4. G1 安装 Linux Debian system

    开发Android第五步,G1 安装 Linux Debian system 在 G1 上安装 Linux Debian system (Debian ARMEL) 要具备以下条件: (a) 最好是 ...

  5. vs2017 cordova调试android app

    方案是:virtualbox + androidx86 7.0+_x64.iso虚拟机方式

  6. Java中动态代理技术生成的类与原始类的区别 (good)

    用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...

  7. win32界面程序开发,自制一个会自动销毁的提示框

    思路:创建线程里面启动窗口,设置定时器关闭该窗口. 创建窗口几个步骤和一般窗口无异,注册.然后createwindow,之后showwinodw,然后消息循环. 在createwindow之后,获取到 ...

  8. Windows XP 每次开机都自动检测硬盘 解决办法(可以用HDDRegenerate修复坏道)

    Windows XP,每次开机都自动检测硬盘,之前正常关机,没有任何非法操作.Windows XP,每次开机都自动检测硬盘,之前正常关机,没有任何非法操作. 1.和硬盘的分区格式有关,FAT32格式在 ...

  9. 【canvas】基础练习一 图形

    Demo1[绘制一条线] <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  10. OSGI资料

    http://osgi.codeplex.com/ http://www.iopenworks.com/