在平时的软件开发中,我们每个team使用一个公共仓库(这里说的是Git仓库)。每当有一个新的需求,我们会拉出一个特性分支,然后在这个特性分支上做开发以及提交个人的代码。

我有个习惯就是:为了确保代码的安全性,每天下班前会把个人的本地仓库代码提交到公共仓库。由于每天开发过程中由于各种原因会提交几次代码到个人仓库,这样就导致下班提交代码到公共仓库时,一次提交好几个记录,这样就会是的公共仓库有各种乱七八糟的所有增量修改历史。为了避免太多的提交而造成版本控制的混乱,通常我们推荐将这些提交合并成一个。

关于Git的常用命令,推荐翻阅Git常用命令

使用rebase合并提交

想要合并n条提交记录,有两个方法:

  1. 从HEAD版本开始往过去数 n 个版本
git rebase -i HEAD~n
  1. 指定一个合并区间 startpointendpoint,注意:该区间指定的是一个前开后闭的区间,意思就是startpoint不参与合并
git rebase -i  [startpoint]  [endpoint]
  • -i 的意思是 --interactive,即弹出交互式的界面让用户编辑完成合并操作
  • startpointendpoint 指定了一个编辑区间
  • 如果不指定endpoint,则该区间的终点endpoint默认是当前分支HEAD所指向的提交

操作

  1. 执行 git log 查看提交历史,接下来我们将三次提交合并为一个提交

  1. 执行 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.

上面的意思就是把第二次、第三次提交都合并到第一次提交上。

  1. 然后保存退出,Git会压缩提交历史。如果有冲突,需要修改,修改的时候要注意,保留最新的历史,不然我们的修改就丢弃了

修改以后要记得敲下面的命令:

git add .  

git rebase --continue

如果你想放弃这次压缩的话,执行以下命令:

git rebase --abort
  1. 如果没有冲突,或者冲突已经解决,则会出现如下的编辑窗口

我们将三次提交信息合并成一个提交信息

Commit feature branch!

#This is first commit.
#This is second commit.
#This is third commit.
  1. 编辑完保存即可完成commit的合并了,我们执行一下 git log

然后提交到公共仓库,有没有感觉提交记录清爽了许多,快来试试吧!

欢迎访问我的个人博客

关注公众号:JAVA九点半课堂,这里有一批优秀的程序猿,加入我们,一起探讨技术,共同进步!回复“资料”获取 2T 行业最新资料!

使用Git-Rebase合并多次提交的更多相关文章

  1. git rebase 合并多次提交.

    一.应用场景 为什么需要合并多个提交呢? 常常一个功能的开发,修修补补 commit 了 n 多次,带来的结果就是提交过多过杂,不够直观,究竟哪些提交是对应这个功能的呢?还有就是,如果我要将这个功能迁 ...

  2. 使用git rebase合并多次commit

    使用git rebase合并多次commit 聊下 git rebase -i

  3. 分布式版本控制系统Git-----7.Git 使用git rebase合并多次commit

    将多次commit合并,只保留一次提交历史. PS:在我练习的时候,将一个文件的代码做了多次修改,而且每次修改都给提交了,这几次改动的目的都一样,比如说修改RADEME.md,但是每次改动的只是一个小 ...

  4. Git 合并多次提交

    在合并分支的时候,希望将多次提交合并成一个,然后再 cherry-pick 到主分支. 合并分支 develop 分支做开发,可能会进行多次提交,但是在发布或者进行 PR 的时候,我们只希望看到一次提 ...

  5. 合并多次提交 commits 到 新分支

    压缩多个Commit 当你提交代码进行代码审查时或者创建一次pull request (这在开源项目中经常发生),你的代码在被接受之前会被要求做一些变更.于是你进行了变更,并且直到下一次审查之前你没有 ...

  6. git rebase修改历史提交内容

    目录 简述 解决过程 简述 git提交历史中有一次提交的内容是有问题,因为每隔一段时间就要发一次版本,所以必须修改这次提交的内容,以便其不影响已经发布的版本. 大概是这样子的 A --- B ---- ...

  7. git<git rebase 修改以前提交过的内容>

      git rebase 使用总结: 使用git rebase 修改以前已经提交的内容 比如要修改之前的commit的 hashcode为:187f869c9d54c9297d6b0b1b4ff47d ...

  8. git rebase命令

    使用git rebase合并多次commit. 当年提交代码后,管理员发现,你的代码不能提交到服务器上,注意原因在于,你的commit中的commit和服务器中的有些commit不在同一时间轴上,即: ...

  9. git合并多个提交

    git合并多个提交 [时间:2016-11] [状态:Open] [关键词:git,git rebase,合并提交,commit] 0. 引言 本文是关于Git提交记录修改的方法,主要是将多个提交记录 ...

随机推荐

  1. Java8新特性之空指针异常的克星Optional类

    Java8新特性系列我们已经介绍了Stream.Lambda表达式.DateTime日期时间处理,最后以"NullPointerException" 的克星Optional类的讲解 ...

  2. Thymeleaf模板引擎的使用

    Thymeleaf模板引擎的使用 1.模板引擎 JSP.Velocity.Freemarker.Thymeleaf 2.springboot推荐使用Thymeleaf模板引擎 特点:语法更简单,功能更 ...

  3. 最简单的ArcGIS Engine应用程序(中)

    上一篇中只能添加代码中指定的shp文件(最简单的ArcGIS Engine应用程序(上)) 为了让用户可以浏览磁盘加载指定的shp文件,需做一下调整. 从工具箱往窗体上添加一个OpenFileDial ...

  4. vc++木马源码免杀一些常用方法

    1.字符串连接 ////////////////////////////////////////////////////////////把字符串"canxin"连接起来(字符串连接 ...

  5. Yroot of High-Precisions (luogu P2293 [HNOI2004]高精度开根)

    Background\text{Background}Background I've accepted\text{I've accepted}I've accepteda very good prob ...

  6. 一文详解CentOS6.5搭建DNS服务

    本文详细介绍DNS服务在Linux Operation System 中的搭建过程 一.DNS服务器的工作原理 客户机提出域名解析请求,并将该请求发送给本地的域名服务器.当本地的域名服务器收到请求后, ...

  7. python学习-函数和lambda表达式(五)

    5.2函数参数 位置参数:根据位置传入参数 关键字参数:根据参数名来传入参数 def girth(width, height): print("width:", width) pr ...

  8. 玩转OneNET物联网平台之简介

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  9. (day27)subprocess模块+粘包问题+struct模块+ UDP协议+socketserver

    目录 昨日回顾 软件开发架构 C/S架构 B/S架构 网络编程 互联网协议 socket套接字 今日内容 一.subprocess模块 二.粘包问题 三.struct模块 四.UDP 五.QQ聊天室 ...

  10. OptimalSolution(1)--递归和动态规划(4)其他问题

    一.汉诺塔问题(包括chapter 1中的汉诺塔问题) 二. 三. 四. 五. 六. 七. 八.