1.git log先找到需要变基(rebase)的Hash ID的下一个ID(不是本身Hash值)
2.git rebase -i (Hash ID) 此时会出现两种情况
1)工作区有变更尚未提交
$ git rebase -i 121f508bc4ac7044c1dda188fc595e7029613f22
不能变基:您有未暂存的变更。
而且您的索引中包含未提交的变更。
请提交或贮藏修改。
遇到这种情况需要将变更缓存,输入git stash 存储变更后再进行第二步操作
2)工作区无变更
此时直接往下执行:
pick f60514c5 a
pick e52ec2e0 b
pick b2ee5bd4 c
pick 1e3b1ed8 d
pick ac231a7a e
pick 1ddd77c2 f
pick de41e172 g
pick bab63064 h
pick f898eacd i# 变基 b0279a0c..f898eacd 到 b0279a0c(9 个提交)
#
# 命令:
# p, pick = 使用提交
# r, reword = 使用提交,但修改提交说明
# e, edit = 使用提交,但停止以便进行提交修补
# s, squash = 使用提交,但和前一个版本融合
# f, fixup = 类似于 "squash",但丢弃提交说明日志
# x, exec = 使用 shell 运行命令(此行剩余部分)
# d, drop = 删除提交
#
# 这些行可以被重新排序;它们会被从上至下地执行。
#
# 如果您在这里删除一行,对应的提交将会丢失。
#
# 然而,如果您删除全部内容,变基操作将会终止。
#
# 注意空提交已被注释掉
3.根据提示,将pick改为适应需求的关键词即可
4.退出保存
5.输入 git stash pop 释放之前保存的缓存然后正常操作即可
补充:
若想要rebase的commit不相邻,可以把调整commit顺序。用上面举例,假如想让i commit向上提可以直接复制粘贴,如下效果:
pick f60514c5 a
pick e52ec2e0 b
pick b2ee5bd4 c
pick 1e3b1ed8 d
pick ac231a7a e
pick 1ddd77c2 f
pick de41e172 gpick f898eacd i
pick bab63064 h
这样的话,hash ID为 f898eacd 的commit就提前了,然后再进行其他操作