Git rebase -i 合并commit

1,362 阅读2分钟

使用场景

当前分支开发完毕,准备合并到主分支。

由于当前分支开发时提交点多,项目想以功能点作为提交点,可以合并当前分支所有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