在平时的软件开发中,我们每个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. 原生js动态创建文本内容的几种方式

    1.通过CreateTextNode文本节点 首先创建该元素(元素节点),然后向一个已存在的元素追加该文本节点 <!DOCTYPE html> <html> <body& ...

  2. DataTableHelper.cs 将DataTable转换为List,将List转换为DataTable的实现类

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. 分库分表(7)--- SpringBoot+ShardingSphere实现分库分表 + 读写分离

    分库分表(7)--- ShardingSphere实现分库分表+读写分离 有关分库分表前面写了六篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理 ...

  4. 安装、卸载 cocoapods

    卸载cocoapods: localhost:~ je$ sudo gem uninstall cocoapods Remove executables: pod, sandbox-pod in ad ...

  5. python服务端工程师就业面试指导☝☝☝

    python服务端工程师就业面试指导 由Python专业面试官打造的课,少之又少,专业代表着经验,代表着对考察点的通透理解,更代表着对你负责 第1章 Python工程师offer直通车(视频+教辅文档 ...

  6. PHP call_user_func的一些用法和注意点

    版本:PHP 5.6.28 在call_user_func的调用中: 1.参数的传递过程,并不是引用传值. 1 error_reporting(E_ERROR); // 此处不是E_ALL 2 $cu ...

  7. luoguP2144 [FJOI2007]轮状病毒

    题目描述 求 nnn 个点的生成树个数. Solution 2144\text{Solution 2144}Solution 2144 打表得 1=125=5×1216=4245=5×32121=11 ...

  8. opencv实践::对象提取与测量

    问题描述 照片是来自太空望远镜的星云图像,科学家想知道它的面 积与周长. 解决思路 方法一: 通过二值分割+图像形态学+轮廓提取 #include <opencv2/opencv.hpp> ...

  9. opencv::模糊图像

    Smooth/Blur 是图像处理中最简单和常用的操作之一,使用该操作的原因之一就为了给图像预处理时候减低噪声 使用Smooth/Blur操作其背后是数学的卷积计算,通常这些卷积算子计算都是线性操作, ...

  10. django1-环境搭建

    我的环境:win10 + pycharm2019.1.3 + python3.6.5 + Django2.1.10 安装django cmd下执行:pip install django==2.1.10 ...