工具篇:git rebase

    xiaoxiao2022-07-03  148

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

    最新回复(0)