使用Git-Rebase合并多次提交
在平时的软件开发中,我们每个team使用一个公共仓库(这里说的是Git仓库)。每当有一个新的需求,我们会拉出一个特性分支,然后在这个特性分支上做开发以及提交个人的代码。
我有个习惯就是:为了确保代码的安全性,每天下班前会把个人的本地仓库代码提交到公共仓库。由于每天开发过程中由于各种原因会提交几次代码到个人仓库,这样就导致下班提交代码到公共仓库时,一次提交好几个记录,这样就会是的公共仓库有各种乱七八糟的所有增量修改历史。为了避免太多的提交而造成版本控制的混乱,通常我们推荐将这些提交合并成一个。
关于Git的常用命令,推荐翻阅Git常用命令
使用rebase合并提交
想要合并n条提交记录,有两个方法:
- 从HEAD版本开始往过去数
n
个版本
git rebase -i HEAD~n
- 指定一个合并区间
startpoint
和endpoint
,注意:该区间指定的是一个前开后闭的区间,意思就是startpoint不参与合并
git rebase -i [startpoint] [endpoint]
- -i 的意思是
--interactive
,即弹出交互式的界面让用户编辑完成合并操作 - startpoint 和 endpoint 指定了一个编辑区间
- 如果不指定endpoint,则该区间的终点endpoint默认是当前分支HEAD所指向的提交
操作
- 执行
git log
查看提交历史,接下来我们将三次提交合并为一个提交
- 执行
git rebase -i HEAD~3
,弹出操作窗口
操作说明:
- pick:保留该commit(缩写:p)
- reword:保留该commit,但我需要修改该commit的注释(缩写:r)
- edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
- squash:将该commit和前一个commit合并(缩写:s)
- fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
- exec:执行shell命令(缩写:x)
- drop:我要丢弃该commit(缩写:d)
根据我们的需求,我们将commit内容编辑如下:
pick 85697ee This is first commit.
squash ee461c1 This is second commit.
squash 326e415 This is third commit.
上面的意思就是把第二次、第三次提交都合并到第一次提交上。
- 然后保存退出,Git会压缩提交历史。如果有冲突,需要修改,修改的时候要注意,保留最新的历史,不然我们的修改就丢弃了
修改以后要记得敲下面的命令:
git add .
git rebase --continue
如果你想放弃这次压缩的话,执行以下命令:
git rebase --abort
- 如果没有冲突,或者冲突已经解决,则会出现如下的编辑窗口
我们将三次提交信息合并成一个提交信息
Commit feature branch!
#This is first commit.
#This is second commit.
#This is third commit.
- 编辑完保存即可完成commit的合并了,我们执行一下
git log
然后提交到公共仓库,有没有感觉提交记录清爽了许多,快来试试吧!
关注公众号:JAVA九点半课堂,这里有一批优秀的程序猿,加入我们,一起探讨技术,共同进步!回复“资料”获取 2T 行业最新资料!
使用Git-Rebase合并多次提交的更多相关文章
- git rebase 合并多次提交.
一.应用场景 为什么需要合并多个提交呢? 常常一个功能的开发,修修补补 commit 了 n 多次,带来的结果就是提交过多过杂,不够直观,究竟哪些提交是对应这个功能的呢?还有就是,如果我要将这个功能迁 ...
- 使用git rebase合并多次commit
使用git rebase合并多次commit 聊下 git rebase -i
- 分布式版本控制系统Git-----7.Git 使用git rebase合并多次commit
将多次commit合并,只保留一次提交历史. PS:在我练习的时候,将一个文件的代码做了多次修改,而且每次修改都给提交了,这几次改动的目的都一样,比如说修改RADEME.md,但是每次改动的只是一个小 ...
- Git 合并多次提交
在合并分支的时候,希望将多次提交合并成一个,然后再 cherry-pick 到主分支. 合并分支 develop 分支做开发,可能会进行多次提交,但是在发布或者进行 PR 的时候,我们只希望看到一次提 ...
- 合并多次提交 commits 到 新分支
压缩多个Commit 当你提交代码进行代码审查时或者创建一次pull request (这在开源项目中经常发生),你的代码在被接受之前会被要求做一些变更.于是你进行了变更,并且直到下一次审查之前你没有 ...
- git rebase修改历史提交内容
目录 简述 解决过程 简述 git提交历史中有一次提交的内容是有问题,因为每隔一段时间就要发一次版本,所以必须修改这次提交的内容,以便其不影响已经发布的版本. 大概是这样子的 A --- B ---- ...
- git<git rebase 修改以前提交过的内容>
git rebase 使用总结: 使用git rebase 修改以前已经提交的内容 比如要修改之前的commit的 hashcode为:187f869c9d54c9297d6b0b1b4ff47d ...
- git rebase命令
使用git rebase合并多次commit. 当年提交代码后,管理员发现,你的代码不能提交到服务器上,注意原因在于,你的commit中的commit和服务器中的有些commit不在同一时间轴上,即: ...
- git合并多个提交
git合并多个提交 [时间:2016-11] [状态:Open] [关键词:git,git rebase,合并提交,commit] 0. 引言 本文是关于Git提交记录修改的方法,主要是将多个提交记录 ...
随机推荐
- Java8新特性之空指针异常的克星Optional类
Java8新特性系列我们已经介绍了Stream.Lambda表达式.DateTime日期时间处理,最后以"NullPointerException" 的克星Optional类的讲解 ...
- Thymeleaf模板引擎的使用
Thymeleaf模板引擎的使用 1.模板引擎 JSP.Velocity.Freemarker.Thymeleaf 2.springboot推荐使用Thymeleaf模板引擎 特点:语法更简单,功能更 ...
- 最简单的ArcGIS Engine应用程序(中)
上一篇中只能添加代码中指定的shp文件(最简单的ArcGIS Engine应用程序(上)) 为了让用户可以浏览磁盘加载指定的shp文件,需做一下调整. 从工具箱往窗体上添加一个OpenFileDial ...
- vc++木马源码免杀一些常用方法
1.字符串连接 ////////////////////////////////////////////////////////////把字符串"canxin"连接起来(字符串连接 ...
- Yroot of High-Precisions (luogu P2293 [HNOI2004]高精度开根)
Background\text{Background}Background I've accepted\text{I've accepted}I've accepteda very good prob ...
- 一文详解CentOS6.5搭建DNS服务
本文详细介绍DNS服务在Linux Operation System 中的搭建过程 一.DNS服务器的工作原理 客户机提出域名解析请求,并将该请求发送给本地的域名服务器.当本地的域名服务器收到请求后, ...
- python学习-函数和lambda表达式(五)
5.2函数参数 位置参数:根据位置传入参数 关键字参数:根据参数名来传入参数 def girth(width, height): print("width:", width) pr ...
- 玩转OneNET物联网平台之简介
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- (day27)subprocess模块+粘包问题+struct模块+ UDP协议+socketserver
目录 昨日回顾 软件开发架构 C/S架构 B/S架构 网络编程 互联网协议 socket套接字 今日内容 一.subprocess模块 二.粘包问题 三.struct模块 四.UDP 五.QQ聊天室 ...
- OptimalSolution(1)--递归和动态规划(4)其他问题
一.汉诺塔问题(包括chapter 1中的汉诺塔问题) 二. 三. 四. 五. 六. 七. 八.