美文网首页
git rebase变基操作二

git rebase变基操作二

作者: stareme | 来源:发表于2020-06-15 11:11 被阅读0次

    项目开发过程中会遇到如下场景:当前主分支A切出一个分支B,B功能开发了一半,但已经有比较多的commit产生。这时候主分支A由于某些原因发生了变化,如通过回退操作到了之前的某个位置。B当然希望这时候也同步主干A的改动,可以发现如果直接merge 主干分支是不能把A回退的那部分提交也合并掉。

    解决方案

    方案一,通过打patch的方式。基于新的A分支建立新分支C,把B新产生的内容生成一个大patch,然后apply到新的分支C, 这样会丢失中间的git信息,并不是一个很好的方法

    方案二,通过cherry-pick,基于新的A分支建立新分支C,把B新产生的内容一次性操作过来

    git cherry-pick commitId..commitId
    

    方案三,通过强大的rebase变基操作。

    // base分支名称
    // from待合并片段的起始commitId(不包含)
    // to待合并片段的结束commitId(包含)
    git rebase --onto base from to
    

    操作步骤

    • 新的主干A建立新分支C,
    • 把B的改动rebase到C分支 git rebase --onto A B开始commitId B结束commitId
    • 这样会B的新改动放到C最新的commit,然后新建一个分D
    • D就是基于主干上合了B最新代码的最终分支

    常用的变基操作

    我们来合并最近的 4 次提交纪录

    git rebase -i HEAD~4
    

    通过rebase来消除本地产生的merge信息

    git rebase master
    

    通过rebase来消除合并远程代码产生的merge信息

    git pull --rebase
    

    真正使用的时候看情况而定,毕竟rebase会改变提交历史

    相关文章

      网友评论

          本文标题:git rebase变基操作二

          本文链接:https://www.haomeiwen.com/subject/cezbzhtx.html