标签: git


缘由?

有一次被人问到怎么把一个分支的所有commit按一个commit合并到主分支上,当时一脸蒙B,平时开发都是直接merge,很少考虑到这种问题,于是特意搜索了相关资料。

场景

其实在开发中,我们永远都是保留一个主master分支干静,我们都是会重新拉一个dev分支做开发,遇到BUG就会拉BUG分支解决BUG,但是在分支上做开发和解决BUG不只会有一个提交,而合并到主干上也没有必要让别的开发看到冗余的commit信息,其实别的开发只要需要看到这个分支是解决了什么问题或者开发了什么任务即可。

按普通的提交流程是:

    git checkout master //切换回主分支
git pull //拉取master代码
git merge dev //如无冲突就已经合并成功如遇冲突就解决冲突再提交代码

如果想合并分支commit到主分支可以按如下走法:

    git checkout master //切换回主分支
git pull //拉取master代码
git merge dev --squash //如遇冲突就解决冲突
git commit -m "这里是注释"

原理就是--squash会把分支上的所有相对master分支的修改一次性推送到本地,这样就可以解决在master上只会看到一个提交了。

方法2

另一种方法就是通过rebase来做合并commit再merge到master分支

1:假设当前在dev分支上,提交了二条commit修改,在dev分支上执行如下代码

    git rebase -i master

这时 git 会打开编辑器,你会看到 dev 分支上的 2 个最新 commit,以及一些指引提示

如下图

每个 commit 前有一个操作命令,默认是 pick ,表示该行被选中,需要进行 rebase 操作。下面一堆注释的指引中还有几个指令,我们常用到的是以下 2 个

  • squash:将这一行的 commit 与上一个 commit 进行合并
  • fixup:与 squash 相同,只是不会保留这行 commit 的提交 message 信息

    按如下图保存后,dev 分支就只剩下 1 个 commit 了,这个合并后的 commit 提交的信息包含之前 2 个 commit 的信息



    再切回master分支执行合并操作即可:
    git checkout master
git merge dev

这样就做到你一个commit提交到了主分支达到要求

参考文章:

通过--squash合并commit

通过rebase合并commit

最新文章

  1. Python 正则表达式入门(初级篇)
  2. Myeclipse 运行maven控制台中文乱码
  3. libc++
  4. poj1509 最小表示法
  5. PIX的使用
  6. c# 获取mac地址的2种方法
  7. 为什么多数游戏服务端是用 C++ 来写
  8. PHP网站简单架构 – 单独跑php-fpm
  9. 你需要知道的12个Git高级命令
  10. 面试题,自己写写dome总是好的
  11. cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(六)-马里奥跳跃
  12. Java servlet ajax
  13. mysql中exists、not exists的用法
  14. Github 开源:使用 .NET WinForm 开发所见即所得的 IDE 开发环境(Sheng.Winform.IDE)【2.源代码简要说明】
  15. Java 获取SQL查询语句结果
  16. dedecms织梦首页如何调用文章列表?
  17. Cronolog日志分割、定时清理
  18. Typescript中的装饰器原理
  19. Python+Selenium学习--自动生成HTML测试报告
  20. C# DataGridView下DataGridViewComboBoxColumn二级联动

热门文章

  1. nagios安装使用指南
  2. Error: connection reset by peer ,during filebeat connect to elk.
  3. 记一次IIS应用程序域崩溃的原因
  4. P4015 运输问题
  5. Python学习之路--1.0 Python概述及基本数据类型
  6. freemarker常用标签解释二
  7. Activiti工作流开发准备(一)
  8. innodb的读写参数优化
  9. python 批量修改包名
  10. HDU 3652 区间有13并且这样整除13 的数量(数位DP)