[关闭]
@longj 2018-06-30T12:13:29.000000Z 字数 790 阅读 5350

使用 git merge --squash 让你的分支合并更加简洁


我们在使用 git 进行版本管理的时候,合并分支最常用的是 git merge <branch> 的命令。但是其实 git 合并分支的方法并不只是这一个。还有其他的方法,可以更好地适合不同的情形,今天主要介绍的是 git merge 命令中的 --squash 的设置。

问题描述

有时候我们开发的时候,为了更好地进行回退和开发,我们会不时地 git commit 来进行 backup。导致有时候我们的分支历史看上去是这样的。

image_1ch88rmuv1a721ggs117b1mme1gs29.png-59.1kB

如果这样在 master 上开发会使得我们的分支历史变得非常冗余。并且当 master 分支上的东西出现问题的时候,版本回退变得更加困难。随着 git 的使用程度逐渐深入,我们需要意识到,master 分支上的代码,应该做到每个版本的代码都可以稳定运行的。但是适时的备份又是开发不可避免的一个需求,那么如何解决这种矛盾呢?git merge --squash 就是其中一种解决方法。

merge --squash

git merge --squash <branch>, 加上了这个标签之后,顾名思义,就是将 <branch> 分支上的修改压缩成一个提交再合并过来。也就是说 将 branch 上的所有改动压缩成一次 commit 再尝试合并进入当前分支。这样之后我们还需要用一次 git commit 来进行一次提交,这个时候我们的分支就可以变得非常简洁了。如下图所示:

image_1ch89m1tjmnm15a56lc19np1n2jt.png-27.4kB

一种比较合适的开发流程

知道了 --squash 这个参数后,以后进行合作开发,我们可以这样操作:

  1. 在 dev 分支上分出新的本地 feature 分支
  2. 在 feature 分支上随意进行的 git 操作,eg. 备份或者版本回退。最大程度方便自己的开发
  3. 开发完成并测试完毕后,切回 dev 分支,使用 git merge --squash feature 来进行压缩合并
  4. 修改可能出现的分支冲突
  5. git commit 进行提交,只提交一个简洁的,可运行的代码版本!
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注