使用 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 后:
![]() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!