问题
开发过程中,我们可能遇到一次merge多个commit的情况,在merge之前我们做测试的时候发现某次提交有问题,这时候我们又不想新提一个commit来解决这个问题,这时候该怎么办?
解决方法
git log 查看历史提交
A---B(有bug)----C----D---E
发现 B 提交有bug,我们想要直接修改B,但是又不想多增加F提交;或者我们想修改B提交的commit信息。
git rebase 修改历史提交
1. git rebase -i HEAD~5 // rebase HEAD之前的5次提交
2. 将需要修改的commit所在的行前面的 pick 修改为edit或者e
利用命令行修改文本,将光标移动至B提交前面pick,然后输入i进入修改模式,将pick改为e,然后输入wq保存
pick b4ba123435 A
e 0ae807b99c B
pick 70890e2e86 C
pick aa0778f109 D
pick 630cc16edb E
3. 之后会发现git的分支信息变为 master|REBASE-i 2/5
4. 修改bug代码,如果只需要修改commit信息可以跳过此步
5. git commit --amend // 以当前代码重新覆盖本次提交
6. 修改commit信息,若不需要修改commit信息则可以直接wq保存结束
7. git rebase --continue // 继续rebase,如果有冲突则解决冲突
注意
- 如果rebase过程中不想rebase了,可以使用
git rebase --abort // 终止rebase
- rebase结束后,会修改所有rebase的commitID,如果想要push到远程仓库可能需要强制push
git push [仓库名] [分支] -f