使用 git rebase 合并多个 commit
这里有一个 Git 仓库,其最近三条提交都是在update test.md,现在想将其合并为一条:
![]() |
用git rebase可以实现,具体命令为:
git rebase -i <startpoint>
startpoint是一个 commit id,命令将处理(startpoint, HEAD]区间内的所有 commit,这个区间要包含想要合并的三条记录,所以startpoint为159ab49d:
![]() |
键入:
git rebase -i 159ab49d
会出现如下内容:
![]() |
按i进入编辑模式,将后两个pick改为s:
![]() |
按esc,然后按:wq写入并退出。之后会显示如下内容:
![]() |
按i进入编辑模式,将后两个update test.md信息删除:
![]() |
按esc,然后按:wq写入并退出。命令行输出Successfully rebased and updated refs/heads/main.之类的信息,说明成功了。
三个 commit 合并成了一个:
![]() |
说明:
- 命令中
-i的意思是--interactive,即弹出编辑界面让用户编辑完成 rebase 操作。 pick表示保留 commit。s是squash的缩写,表示“压缩” commit,后两个 commit 标记为s,表示将后两个 commit 逐个“压缩”到前面的 commit(即第一个 commit)。- 如果你用
git push推送失败,可以试试git push -f强制(!)推送。 - 文中的 commit 曲线图由 VSCode 扩展 Git Graph 展示。
顺带一提,有时候会在 GitHub 看到这样的提交信息:
![]() |
怎么做到的?
现在,在仓库中创建三个 Markdown 文件,并提交更改:
![]() |
确定startpoint为414396d7:
![]() |
键入:
git rebase -i 414396d7
编辑 commit:
![]() |
编辑 commit 信息:
![]() |
推送到 GitHub 后:
![]() |













浙公网安备 33010602011771号