美文网首页
git merge 和git rebase的区别

git merge 和git rebase的区别

作者: ColdRomantic | 来源:发表于2016-09-11 23:57 被阅读66次

    最近在学习git的版本控制,分支之间的同步、冲突处理,cherry-pick等有趣的功能。下面是整理的一些学习笔记。

    一、git merge [branchName]

    顾名思义,就是合并分支,比如你当前代码库有两个分支一个是master,另一个是dev-feature。(如下图)

    Repo(two branch)

    我们在dev-feature 分支,想同步master的通用修改:

    git checkout dev-feature
    git merge master

    Git会按照修改的时间点将master分支的修改记录依次应用到dev-feature分支。 我们使用git log 可以看到修改记录依次为(从新到旧):C7←C5←C6←C3←C4←C2←C1。

    二、git rebase [branchName]

    按照字面意思立即就是变基,比如我们当前在dev-feature分支,执行git rebase master,Git会先找到new-feature分支和master的最近公共祖先(C2结点),然后把当前分支的后续修改依次应用于master分支。
      Git会把C4和C6节点回收,可以用git gc查看。

    三、冲突解决

    如果变基过程中发生冲突(比如我们修改了文件的同一行)!然后我们找到下图中标记的地方,修改代码解决冲突。
      在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决冲突;在解决完冲突后,用git add命令去更新这些内容的索引(index), 然后,你无需执行 git commit ,只要执行:

    $ git rebase --continue

    这样git会继续应用(apply)余下的补丁。
    在任何时候,你可以用<a>--abort</a>参数来终止rebase的行动,并且"dev-feature" 分支会回到rebase开始前的状态。

    $ git rebase --abort

    下面是冲突代码的截图


    conflict

    同时我们查看版本树,发现正在将C2的修改应用于master分支的C3之上。


    conflict occur

    变基完成后


    rebase success
    《完》

    相关文章

      网友评论

          本文标题:git merge 和git rebase的区别

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