git合并分支上的commit为一条commit到master
标签: 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
git合并分支上的commit为一条commit到master的更多相关文章
- git合并分支上指定的commit
merge 能够胜任平常大部分的合并需求.但也会遇到某些特殊的情况,例如正在开发一个新的功能,线上说有一个紧急的bug要修复.bug修好了但并不像把仍在开发的新功能代码也提交到线上去.这时候也许想要一 ...
- 多人开发的git项目如何保持提交日志为一条直线?
多人开发的git项目如何保持提交日志为一条直线? 一.Git的项目的git常用操作 a)Git clone 项目地址 从远程仓库克隆项目到本地 b)Git pull 从当前分支拉取更新代码 c)Git ...
- git 合并分支到master
git 合并分支到master 假如我们现在在dev分支上,刚开发完项目,执行了下列命令 git add .git commit -m ‘dev'git push -u origin dev 然后 ...
- git合并分支到master上面
转自:https://www.cnblogs.com/mafeng/p/10173919.html 假如我们现在在dev分支上,刚开发完项目,执行了下列命令 git add .git commit - ...
- 用git合并分支时,如何保持某些文件不被合并
用git合并分支时,如何保持某些文件不被合并_fkaking的专栏-CSDN博客_git 合并分支 https://blog.csdn.net/fkaking/article/details/4495 ...
- Git: A分支上的commit提交到B分支上
1. 执行git log -3 --graph A,查看A分支下的commit: 注:commit 后面的hash值代表某个commit,这里把”82f1fb7138c5860cc775b4b5ea7 ...
- Git合并分支或者冲突
假设冲突文件是 test/TestCase.php 下面分5种情况讨论. 1.本地不变. 然后远程别人有更新. git pull 这种最简单,没有冲突,本地工作区直接更新 2.我本 ...
- git合并分支理解和常用命令的总结
原文参考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 工作区和暂存区 工作区 ...
- Git合并分支命令参数详解:git merge --ff
今天研究了一下git merge命令常用参数,并分别用简单的例子实验了一下,整理如下: 输入命令git merge -h可以查看相关参数: --ff 快速合并,这个是默认的参数.如果合并过程出现冲突 ...
随机推荐
- 第一个spring MVC
1.导包 Spring所有包 2.web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web- ...
- phaser小游戏框架学习(二)
今天继续学习phaser.js.上周写的学习教程主要内容是创建游戏场景,游戏中的显示对象,按钮对象的使用以及如何在不同屏幕大小中完美适配.这篇博客以介绍游戏榜单的渲染更新为主. 代码地址:https: ...
- 一些意想不到的小bug。
一,当if的时候,很容易忘记相对的else,从而出现bug,要将背面消息考虑全面. 二,多个元素在同一行布局的时候,要考虑文字的换行还是省略号代替. 例如:左边一个文字,宽度不固定,右边一个图形,宽度 ...
- 数据结构7: 循环链表(约瑟夫环)的建立及C语言实现
链表的使用,还可以把链表的两头连接,形成了一个环状链表,称为循环链表. 和它名字的表意一样,只需要将表中最后一个结点的指针指向头结点,就形成了一个环. 图1 循环链表 循环链表和动态链表相比,唯一的不 ...
- IE浏览器提示对象不支持“append”属性或方法
如下代码在IE浏览器中无法执行,提示对象不支持“append”属性或方法 var tImg = document.createElement("img"); tImg.setAtt ...
- CodeForces-Zuhair and Strings(思维+枚举)
Given a string ss of length nn and integer kk (1≤k≤n1≤k≤n). The string ss has a level xx, if xx is l ...
- clip-path(css)
概述 clip-path属性可以防止部分元素通过定义的剪切区域来显示,仅通过显示的特殊区域.剪切区域是被URL定义的路径代替行内或者外部svg,或者定义路线的方法. [注意] IE浏览器不支持,且低 ...
- rest_framework 的验证,权限,频率
回到顶部 快速实例 Quickstart 回到顶部 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之 ...
- 关于web安全需要在编程时注意的
公司用绿盟科技的远程安全评估系统扫描了项目,发现一些安全隐患,记录下来,以规避以后编程或者发布时犯同样的错误. 1. 目标web应用表单存在口令猜测攻击 风险:登录密码易被暴力破解,暴力破解是一种常见 ...
- Java StringTokenzier
Java中substring方法可以分解字符串,返回的是原字符串的一个子字符串.如果要讲一个字符串分解为一个一个的单词或者标记,StringTokenizer可以帮你. public static v ...