使用场景
当前分支开发完毕,准备合并到主分支。
由于当前分支开发时提交点多,项目想以功能点作为提交点,可以合并当前分支所有commit为一个,再合并到主分支。 修改前
1. 进入rebase交互模式
// 选择交互操作 9891a9d 之后 commit点(不包括9891a9d),
git rebase -i 9891a9d
2. 修改提交点操作
会弹出交互编辑工具(vi等)
pick ae6781f test_rebase 第一次提交
s b3ef35f test_rebase 第二次提交
s 01c5cdf test_rebase 第三次提交
修改需要合并 第二、第三 前缀为 s (squash 缩写),这样第二、第三修改内容就会合并到第一
退出保存(:wq)
// 操作命令
pick 采用该提交(默认行为)
reword 采用该提交,但要求修改提交记录的备注
edit 采用该提交,但要求修改提交记录的信息,如:作者名称,邮箱地址等
squash 采用该提交,但它会被并入前一条提交
fixup 类似“squash”,但是会丢弃这条提交记录的日志信息
exec 执行指定的shell脚本或命令
drop 丢弃该提交
3. 修改提交信息
第二步保存后会再次弹出交互编辑工具(vi等),修改commit message
// 将三次的提交信息合并为一次提交信息
test_rebase fix
退出保存(:wq)
4. 推送到远程仓库
如果修改的commit点没有推送到远程分支,到第三步已经完成操作了。
如果已经推送到远程分支,要提醒其他小伙伴拉取过的注意拉取。
强制推送到远程分支(如果不强制推送会失败)
git push -f origin test_rebase
5. 撤销rebase修改
在未完成修改、未强制推送到远程仓库、git报错异常 都可以撤销重新操作。
git rebase --abort