Git合并Commit

1,020 阅读2分钟

一、rebase简介

git rebase 可以对某一段线性提交历史进行编辑、删除、复制、粘贴。合理使用rebase命令可以使提交的历史更干净、简洁!

注意:

不要尝试通过 rebase 对任何已经提交到公共仓库中的commit进行修改。

只要分支上需要 rebase 的所有 commits 历史还没有被 push 过,就可以安全地使用 git rebase ,但请谨慎操作。

**例如:**当在本地仓库中 commit 多次后,在 push 到公共仓库中之前,可以把如下分支B、C、D三个提交记录合并为一个完整的提交,然后再push到公共仓库。

合并commit图示.png

二、操作步骤

2.1 命令简介

git rebase -i [startpoint] [endpoint]
# 或 进行最近的 n 次提交纪录的合并
git rebase -i HEAD~n
  • -i:完整表达式为 --interactive,即弹出交互式界面让用户编辑完成合并操作。
  • [startpoint]、[endpoint]: 指定了编辑区间(前开后闭),如果不指定 [endpoint] ,则该区间重点默认为当前分支 HEAD 所指向的 commit
  • HEAD~n:进行最近n次提交记录的合并。
git log # 查看提交历史
git log --oneline # 单行展示提交历史

2.2 具体示例

将 “commit01~04” 合并为 “commit”

image-20201125225153148.png

命令

# 执行git rebase命令,修改最近4次commit
$ git rebase -i HEAD~4
pick f08e55a commit01
s e70fe26 commit02
s 8849186 commit03
s efc24d0 commit04
# 保存退出后,进入注释修改界面,修改合并后的注释提交即可。

图示

1、执行git rebase 命令 ,选择指令类型

image-20201125230707682.png

  • 未被注释的部分为rebase操作包含的所有提交,commit id前为指令类型
  • 指令类型:
    • p,pick:保留该commit。
    • r,reword:保留该commit,但修改该commit的注释。
    • e,edit:保留该commit,但要停下来修改该提交(不仅仅修改注释)。
    • s,squash:将该commit和前一个commit合并。
    • f,fixup:将该commit和前一个commit合并,但不保留该提交的注释信息。
    • x,exec:执行shell命令。
    • d,drop:丢弃该commit。
    • ...

2、修改提交注释:

image-20201125231403279.png

3、查看修改结果:

image-20201125231727605.png

参考

使用git rebase合并多次commit

Git分支——变基

【Git】rebase 用法小结