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

git merge 和 git rebase的差别

作者: YQY_苑 | 来源:发表于2018-08-16 10:38 被阅读0次

    假设最开始只有一个origin分支
    然后你在本地新建了一个分支来开发自己的工作叫mywork,然后我们做一些修改添加,并提交两个commit

    $ git checkout -b mywork origin
    $ vi file.java
    $ git add file.java
    $ git commit 
    $ vi otherfile.java
    $ git add otherfile.java
    $ git commit 
    
    
    image.png

    这时有人在origin中做了一些修改并提交,推送到origin了

    image.png

    这时你可以"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交",合并时可以用rebase和merge
    git merage

    image.png
    git checkout origin
    git pull
    git checkout mywork
    git merge origin
    
    

    这时Git 会用两个分支的末端(C4 和 C6)以及它们的共同祖先(C2)进行一次简单的三方合并计算
    对三方合并后的结果重新做一个新的快照,并自动创建一个指向它的提交对象(C7),此时mywork快进到c7也指向c7。这就是merge他会保留每一次提交的历史。
    git rebase
    但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:

    git checkout mywork
    git rebase origin
    // git rebase --onto master server client
    
    

    上面的命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新到最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上生成c5' 和 c6‘

    image.png

    这时如果想把mywork合并到origin上,可以运行如下命令

    git checkout origin
    git merge mywork 
    

    相关文章

      网友评论

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

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