使用 git rebase 合并多个 commit

这里有一个 Git 仓库,其提交历史如下:

img

最近三条提交都是在update test.md,现在想将其合并为一条:

img

git rebase可以实现,具体命令为:

git rebase -i <startpoint>

startpoint是一个 commit id,命令将处理(startpoint, HEAD]区间内的所有 commit,这个区间要包含想要合并的三条记录,所以startpoint159ab49d

img

键入:

git rebase -i 159ab49d

会出现如下内容:

img

i进入编辑模式,在将要处理的 commit 中将后两个pick改为s

img

esc,然后按:wq写入并退出。之后会显示如下内容:

img

i进入编辑模式,将后两个update test.md信息删除:

img

esc,然后按:wq写入并退出。命令行输出Successfully rebased and updated refs/heads/main.之类的信息,说明成功了。看看 commit:

img

三个 commit 合并成了一个。

  1. 命令中-i的意思是--interactive,即弹出编辑界面让用户编辑完成 rebase 操作。
  2. pick表示保留 commit。
  3. ssquash的缩写,表示“压缩” commit,后两个 commit 标记为s,表示将后两个 commit 逐个“压缩”到前面的 commit(即第一个 commit)。
  4. 如果你用git push推送失败,可以试试git push -f强制(!)推送。
  5. 文中的 commit 曲线图由 VSCode 扩展 Git Graph 展示。

不时会在 GitHub 看到这样的提交信息:

img

怎么做到的?

现在,在仓库中创建三个 MarkDown 文件,并提交更改:

img

确定startpoint414396d7

img

键入:

git rebase -i 414396d7

编辑 commit:

img

编辑 commit 信息:

img

推送到 GitHub 后:

img

ref: 使用 git rebase 合并多次 commit

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章