有时候我们回头看之前提交的commitid会发现有些随意,打算整理一下,我们要将最近的几次commit合并成一个commit,可以使用git rebase的交互模式(interactive rebase)来实现。
操作步骤(以合并最近的 3 次提交为例):
启动交互式变基
执行以下命令(HEAD~3 表示合并最近的 3 次提交):
git rebase -i HEAD~3
如果想合并最近 N 次提交,将 3 替换为 N。
编辑提交列表
终端会打开一个编辑器(如 Vim),显示类似以下内容:
pick c1a2b3d Commit 1 # 最早的提交
pick d4e5f6g Commit 2
pick e7f8h9i Commit 3 # 最近的提交
将 后两次提交 前的 pick 改为 squash(或简写 s),保留最旧的一次为 pick:
pick c1a2b3d Commit 1
squash d4e5f6g Commit 2
squash e7f8h9i Commit 3
保存并关闭编辑器(Vim 按 :wq 退出)。
编写新提交信息
Git 会再次打开编辑器,让你修改合并后的提交信息:
# 这是三次提交的合并:
# Commit 1
# Commit 2
# Commit 3
删除所有内容,重写为一条新提交信息(例如:feat: 合并最近三次提交)。
保存并关闭编辑器(Vim 按 :wq 退出)。
完成合并
若没有冲突,Git 会自动完成操作。
若有冲突,按提示解决后执行:
git add . # 标记冲突已解决
git rebase --continue # 继续变基
强制推送到远程仓库(如果已推送过)
git push -f