git合并分支上的commit为一条commit到master

标签: gitgit


原因?

有一次被人问到怎么把一个分支的全部commit按一个commit合并到主分支上,当时一脸蒙B,平时开发都是直接merge,不多考虑到这种问题,因而特地搜索了相关资料。编辑器

场景

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

按普通的提交流程是:3d

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

若是想合并分支commit到主分支能够按以下走法:code

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

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

方法2

另外一种方法就是经过rebase来作合并commit再merge到master分支
1:假设当前在dev分支上,提交了二条commit修改,在dev分支上执行以下代码开发

git rebase -i master

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

每一个 commit 前有一个操做命令,默认是 pick ,表示该行被选中,须要进行 rebase 操做。下面一堆注释的指引中还有几个指令,咱们经常使用到的是如下 2 个it

  • squash:将这一行的 commit 与上一个 commit 进行合并
  • fixup:与 squash 相同,只是不会保留这行 commit 的提交 message 信息
    按以下图保存后,dev 分支就只剩下 1 个 commit 了,这个合并后的 commit 提交的信息包含以前 2 个 commit 的信息
    修改pick为squash
    再切回master分支执行合并操做便可:
git checkout master
    git merge dev

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

参考文章:
经过--squash合并commit
经过rebase合并commit

相关文章
相关标签/搜索