git rebase 合并历史提交的多个分支

今天因为在自己分支上提交了多个commits,合入master时被cr的同事叼了一顿:一个功能模块不要提交太多commits,导致master主线混乱。所以研究了一下如何合并多个历史提交的commits。

根据关键字搜了一下找到几篇文章,都将答案指向了git rebase -i 命令,接下来在测试的分支上实践一番:

1.git log 查看提交历史

可以看到有三次历史记录,分别是"a", "b", "c"

2.git rebase -i (from, to]

from和to分别是commits的hash值,即从from commit到to commit之间的commits(不包含from)都将被合并。这里我们要合并a->c之间的3个提交,那么输入:

git rebase -i 5c400f38b9d64c73fd173749c483433b471e64f8 ba5bb072f43de6e5e227861a9862e8793af6eaa5

可以看到提示:

p, pick <提交> = 使用提交
r, reword <提交> = 使用提交,但修改提交说明
e, edit <提交> = 使用提交,进入 shell 以便进行提交修补
s, squash <提交> = 使用提交,但融合到前一个提交
f, fixup <提交> = 类似于 "squash",但丢弃提交说明日志
x, exec <命令> = 使用 shell 运行命令(此行剩余部分)
b, break = 在此处停止(使用 'git rebase --continue' 继续变基)
d, drop <提交> = 删除提交
l, label

这里我们主要使用"pick"和"squash"来分别选择保留和丢弃提交日志。

然后保存vim后弹出下一个编辑框:

编辑合并的提交日志:

保存后,再次查看git log:

可以看到三次commits已经合并完成。

3.合并到原分支

因为rebase 后在一个临时分支上,可以直接push -f 推到远端。

`
git push -f origin xx

`

即可覆盖远端的历史commits。

posted @ 2020-10-20 17:35  puyangsky  阅读(2410)  评论(0编辑  收藏  举报