使用 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 后: