工具篇:git rebase

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时,会产生新的提交。

你可能感兴趣的:(git,工具)