应用场景
当我们在 Feature 分支开发功能的时候,很可能会先部分提交,最终合并的时候会包含多个 Commit,其中可能会掺杂着无意义的提交,如果直接合并到主分支,会导致长期维护的主分支难以阅读。
当然,直接合并和 Squash 合并并无对错,更多的是取决于偏好和约定。本篇文章用于记录如何使用 Squash 提交
使用方式
方式一:借助 Interactive Rebase 实现
现在的提交状态如下,feature/login
分支开发完成,需要合并到 dev
分支。
执行命令
$ git rebase -i HEAD~3
弹出交互式操作页面
将 2、3 行的 pick 修改为 squash 并保存
在新的提交的页面填写 Commit 信息,再次保存
feature/login
分支三条 Commit 合并为一条
切换到 dev
分支,合并 feature/login
功能
git checkout dev
git merge feature/login
最终得到一个干净的 dev 分支。
如果在分支开发时 dev
主线分支已经发生了变化
合并后效果如下,同样简洁。
这就是第一种通过 “Interactive Rebase” 实现的 Squash Commit
方式二:通过 merge 实现
重新构造一个分支用于实验
切换到 dev
分支执行
$ git merge --squash feature/add-coin
$ git add a.txt
$ git commit -m "Feat: support add coin"
通过 merge
加 --squash
参数的方式,也实现了类似的效果,将多个 Commit 合并为一个 Commit 提交到 dev
分支,不同的是本地分支被完整的保留下来。
另外,通过这种方式,也可以避免由于合并而发生的自动提交。
总结
两种方式各有特点,根据情况选择使用即可。
善用 “Squash Commit” 可以简化提交历史,有利于主分支的简洁。