美文网首页Git
Git 系列10 git merge/rebase 使用场景

Git 系列10 git merge/rebase 使用场景

作者: XBruce | 来源:发表于2020-08-21 13:45 被阅读0次

    git merge一般只适用于为了保留将所有历史,而将分支的整个特性集合并到另一个分支中。除此以外的其他use case最好使用rebase的几种方式来实现:

    • 经典的
    • 三点的
    • 交互的 interactive
    • 筛选方式 cherry-pick

    Git 用户最重要的技能莫过于维护一个简洁,清晰的提交历史。为了实现这一目标,需要用到以下工具:

    git commit --amend
    git merge (--no-ff)
    git rebase
    主要使用:git rebase -i 和 git rebase -p
    git cherry-pick (配合rebase使用)
    

    什么情况下适用于merge

    执行merge操作,主要是为了将我们当前的branch提交居前。你需要问一个问题:“这个待merge的其他分支为什么存在或者建立的?”

    • 本地/临时的分支
      如果这个分支只是为了master提交更简洁而单独拉出来的分支
      1)假设现在master分支有新的commit,那这个临时分支为了保持更新,需要执行rebase使得提交在最新的master之上。假设
      2)假设master分支没有产生新的commit,那么执行merge ff足以。
    • 重要的分支
      重要的分支一般是团队认定的分支,敏捷开发中一般依据的Sprint/Story/Feature来定义。而在bug追溯系统中一般用issue来定义。
      如果此时master分支自从branch out这个新分支时,并未有新的提交,那么直接请使用merge而不是rebase,并且使用 --no-ff(该分支中间的commits在master不可见,从而保持master简洁)

    什么情况下适用于rebase

    顾名思义,rebase=改变branch的base。

    • 当准备push到远程分支时,如果已经有别的成员push了新的提交,系统会拒绝你的push请求。此时如果执行pull --> merge,将会导致提交历史不够简洁。这种情况就适合rebase来实现。
    • 还有一种情况,当有一个新的idea,从而建立一个新分支,但是过了很久以后,才有时间继续进行。这时候,master分支已经有了长足进步,可能fix了一些bug,也可能有其他的改进,如果你想让你的idea基于最新的成果,那么rebase也是不二之选。
    • 最后一种非常常用的,不过目的时为了让历史commit更加简洁,在开发过程中,可能会在分支中commit非常频繁,比如为了修改一个bug,可能会commit多次,这将会导致提交的历史不够简洁,因此在把上述push到远程分支的时候,就可以使用rebase来合并多次commit为1次。
    git rebase -i HEAD~x #x代表合并之前的几个commit
    

    使用规则建议

    • 合并一个本地临时分支
      为了不把本地的提交历史呈现在master分支,需要在ff合并之前rebase
    • 合并一个本地重要分支
      如果要让从头到尾的所有commit呈现,则执行merge
    • 在将本地工作push之前,先把本地历史处理简洁
    • 当push操作因为分支有新提交而导致冲突时,首先rebase基于远程更新后的分支

    相关文章

      网友评论

        本文标题:Git 系列10 git merge/rebase 使用场景

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