在平时的软件开发中,我们每个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 行业最新资料!

最新文章

  1. 三层架构的OPP实现的演示例子
  2. Spring源码分析——资源访问利器Resource之接口和抽象类分析
  3. [并查集] POJ 1182 食物链
  4. <input type="file">火狐兼容
  5. python group()
  6. PDF 补丁丁 0.4.2.1013 测试版发布:修复替换PDF文档字体等问题
  7. eclipse workspace 共享配置文件
  8. C# 探索c#之Async、Await剖析
  9. MNIST手写数字数据库
  10. zoj Treasure Hunt IV
  11. 【http】生命周期和http管道技术 整理中
  12. HTML5画布(线条、渐变)
  13. 桌面应用框架 OneRing
  14. JQuery和Ajax在ASP.NET MVC中的基本应用
  15. js面向对象学习笔记(三):原型
  16. Kafka学习笔记2: 快速入门
  17. markdown中如何插入公式
  18. Python:SQLMAP参数中文解释
  19. python读取大文件
  20. redux 数据规律

热门文章

  1. Hackers' Crackdown UVA - 11825
  2. postman全局变量设置
  3. PHP array_reduce
  4. Qt 找不到rc.exe
  5. liunx定时备份mongo数据库并实现自动删除N天前备份
  6. php反序列化漏洞复现过程
  7. django1-环境搭建
  8. linux "No space left on device" 磁盘空间解决办法
  9. 用Python新建用户并产生随机密码
  10. Nginx 热部署和日志切割,你学会了吗?