git rebase 最大的作用是可以重写历史(重写提交记录)
合理使用 rebase 命令可以使我们的提交历史干净、简洁 !
rebase 在 git 中是一个非常有魅力的命令,使用得当会极大提高自己的工作效率;如果乱用,会给团队其他人带来麻烦
相信绝对大多数公司都会有这个要求: 每天下班前必须将当天的代码推送到远程库,但是今天在本地做了多次提交记录,你想要将今天的多次提交记录合并为一个提及记录,然后再推送到远程库。此时,使用 git rebase 命令可以实现你的目的
有这样一个仓库,当前有 5 个提交记录,我想要将最后三次的提交记录合并为一个提交记录
使用下面命令进行提交记录的合并,-i, --interactive
参数的作用是以交互式的界面让用户编辑完成合并的操作
git rebase -i HEAD~3
也可以使用
git rebase -i 2402738
执行命令后进入以下界面,修改完成后使用 :wq
保存退出
指令编辑区域: 本次 rebase 操作包含的所有提交,每一个 commit id 前面的 pick 表示指令类型
指令说明区域: 指令类型说明,rebase 的指令类型有以下几种
指令 | 缩写 | 描述 |
---|---|---|
pick | p | 保留该 commit |
reword | r | 保留该 commit,修改该 commit 的注释 |
edit | e | 保留该 commit,修改该 commit,不仅仅是注释 |
squash | s | 将该 commit 和前一个 commit 合并 |
fixup | f | 将该 commit 和前一个 commit 合并,但不保留该提交的注释 |
exec | x | 执行 shell 命令 |
drop | d | 丢弃该 commit |
rebase 指令类型编辑界面修改完成后进入注释修改界面,修改完成后使用 :wq
保存退出
合并成功后的提示
将合并成功后结果推送至远程库时会报错,必须使用 -f 参数进行强制推送才行
刚才我们是将远程库中的多个 commit 合并为一个 commit,下面来测试将本地的多个 commit 合并为一个 commit
合并最新的 4 个提交记录
git rebase -i HEAD~4
话不说多,直接上操作流程图
总结: 合并远程库中的多个 commit 推送时需要强制推送,合并多个未推送到远程库的多个本地 commit,不需要强制推送。平时开发中,合并本地的多个 commit 还比较实用,已推送到远程库中的 commit 不建议轻易的去修改它