git rebase用于修改commit,包括合并多次提交、删除某些提交、修改提交信息、修改提交代码、复制某些提交到另一分支、合并其他分支代码到当前分支等。
注意事项:已经推送到远程仓库的commit,强烈不建议进行rebase操作。否则需要强制push或是产生其他一些问题。
格式:git rebase -i commit1 commit2
这里-i是--interactive的简写,表示进入交互式界面,编辑提交
commit参数是前开后闭,即不包含commit1,包含commit2。如果省略commit2,那么表明到最后一次commit。
一、合并提交
1. 开始修改最近n次提交,git rebase -i head~n,或git rebase -i head^^^(此处有n个^)
2. 第一个pick,剩余的全部是squash
3. 保存修改后,编辑提交信息,再保存,即完成合并。
二、删除提交
1. 开始修改最近n次提交,git rebase -i head~n,或git rebase -i head^^^(此处有n个^)
2. 修改待删除的提交前面为drop或d,其他提交前的pick不修改
3. 保存修改后,编辑提交信息,再保存,即完成删除
三、复制到另一分支
1. 把提交从commit1(不包括)到commit2(包括)复制到branchName分支上,git rebase commit1 commit2 --onto branchName
2. git log查看最后的提交,记录commit-id,再切换到目标分支
3. 使head指向最后的提交,git reset --hard commit-id
四、合并当前分支代码到目标分支
cherry-pick或merge是复制代码到当前分支,而rebase合并代码的方向与它们相反,是合并到目标分支。
1. 合并当前分支代码到目标分支
该命令会从当前分支与目标分支最近的祖先提交开始后,把当前分支之后的所有提交复制到目标分支上,当前分支名也指向了复制后的提交。再把HEAD指向目标分支名引用,再进行一次rebase,即可使得目标分支名引用指向复制后的提交。
sourceBranch> git rebase targetBranch sourceBranch> git checkout targetBranch targetBranch> git rebase sourceBranch
2. 如果有冲突,手动解决后,git rebase --continue
得到的提交记录比较干净,不会产生新的提交。使用git merge otherBranch时,会产生新的提交。