Git小技巧之使用Rebase命令合并提交
想要获取更多文章可以访问我的博客 - 代码无止境。
在日常的开发过程中,我们一个功能可能会有很多次提交。而且我们公司的开发是不允许直接往公司仓库提交代码,所以需要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命令合并提交的更多相关文章
- Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具
前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...
- Git 小技巧
分享git的几个小技巧,后面会根据使用补充.目前包括git撤销本地修改.git回退到前n个版本.git多用户提交冲突解决.git 命令简化.欢迎大家补充^_* 1.git撤销本地修改 git rese ...
- git小技巧--如何从其他分支merge个别文件或文件夹
在实际工作中,一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,进行分别开发. 创建分支 功能分为2个分支,分别为A.B. A上面有个列表页功能 B上面有个详情 ...
- Python小技巧:使用一行命令把你的电脑变成服务器
不知道你有没有遇到这么一种情况,就是你有时候想要把电脑上的一些东西传输到你的手机或者 Pad ,你要么需要使用数据线连接到电脑,有时候还要装各种驱动才可以进行数据传输,要么需要借助第三方的工具,在局域 ...
- git小技巧--提取/合并某分支的部分文件
软件开发基本都是多个feature分支并行开发,而在上线前有可能某个分支的开发或测试还没有完成,又或者是产品调整,取消了该分支功能的上线计划,我们在release前不合并该分支即可,然而如果该分支中的 ...
- git小技巧之分支、关联远程仓库、回滚、解决.gitignore不生效等
1.分支管理 新建并切换分支:git checkout -b <name>新建本地分支并关联到远程分支git checkout -b myRelease origin/Release合并某 ...
- Git小技巧:VIM中如何填写注释信息
使用Git命令行工具的时候,经常一不小心就进入VIM界面,例如git commit没有填写任何描述信息.对于习惯了Windows可视化操作界面的用户,可能一下子会觉得无所适从,只能在键盘上一顿短按.下 ...
- Git 使用技巧(一):合并分支
在合并分支之前最好保证你所有的分支都是最新的,所以你可以使用 git pull origin branchName 来拉取远程仓库到本地仓库. 假如有一个 dev 分支需要合并到 master 分支中 ...
- 【转载】运维小技巧:使用ss命令代替 netstat
转自:https://www.91ri.org/12470.html ss是Socket Statistics的缩写. 顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类 ...
随机推荐
- 持续集成及部署利器:Go(不要和Google的编程语言Go混淆了!)
Go是一款先进的持续集成和发布管理系统,由ThoughtWorks开发.(不要和Google的编程语言Go混淆了!)其前身为CruiseControl,是ThoughtWorks在做咨询和交付交付项目 ...
- JS trim函数
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- MVC EF 导航属性
@model IQueryable<EFExam.Models.CategoryProductViewModel>@{ Layout = null;}<!DOCTYPE htm ...
- python 运行出现flask运行时提示出错了或者报服务器出错,ValueError: View function did not return a response
python manage.py runserver -d
- 手把手教你学会 基于JWT的单点登录
最近我们组要给负责的一个管理系统 A 集成另外一个系统 B,为了让用户使用更加便捷,避免多个系统重复登录,希望能够达到这样的效果--用户只需登录一次就能够在这两个系统中进行操作.很明显这就是单点登 ...
- .NET VS 自定义新建代码文件模板
参考:http://www.cnblogs.com/fightingtong/p/3765914.html 在VS中新建文件时,可使用模板在文件中生成指定内容.只需要把IDE安装目录下的模板进行修改保 ...
- 照片美妆---基于Haar特征的Adaboost级联人脸检测分类器
原文:照片美妆---基于Haar特征的Adaboost级联人脸检测分类器 本文转载自张雨石http://blog.csdn.net/stdcoutzyx/article/details/3484223 ...
- Win8 Metro(C#)数字图像处理--2.72图像噪声
原文:Win8 Metro(C#)数字图像处理--2.72图像噪声 [函数名称] 噪声函数WriteableBitmap NoiseProcess(WriteableBitmap src, ...
- 微信小程序把玩(三十五)Video API
原文:微信小程序把玩(三十五)Video API 电脑端不能测试拍摄功能只能测试选择视频功能,好像只支持mp4格式,值得注意的是成功之后返回的临时文件路径是个列表tempFilePaths而不是tem ...
- 变量的选择——Lasso&Ridge&ElasticNet
对模型参数进行限制或者规范化能将一些参数朝着0收缩(shrink).使用收缩的方法的效果提升是相当好的,岭回归(ridge regression,后续以ridge代称),lasso和弹性网络(elas ...