Git 合并多个提交(Squash Commits)

Published: 2022-03-03

Tags: Git


应用场景

当我们在 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” 可以简化提交历史,有利于主分支的简洁。

参考