2017-07-04 75 views
1

我有一个本地(从未被推到远程)特性分支F1有几次提交制成。我似乎不明白这两个动作之间的差异(F1是当前分支):Git的变基地方VS混帐拉--rebase起源

git fetch origin 
git rebase master 

git pull --rebase origin master 

我的期望是,他们应该是等价的,但他们不是 - 产生不同的结果。

我的想法有什么问题?

回答

2

git fetch origingit rebase master将从F1更改应用到本地master分支。假设你的提交历史类似以下为第一(远程master分公司在远程提交J):

A---B---C---D---E master 
     \ 
      F---G---H F1 

当您执行git fetch origingit rebase master,甚至origin/masterJ,只会重订的F1分支本地master分支(提交E作为图形)的顶部:

A---B---C---D---E(master)---J origin/master 
       \ 
        F---G---H F1 

2.命令git pull --rebase origin master将拉动从远程01变化分支在第一,然后变基当前分支F1在它的顶部:

A---B---C---D---E---J  master,origin/master  
        \ 
         F---G---H F1 

总之,如果本地master分支与远程master分支同步,这两种方式具有相同的结果(上变基F1分支主分支的顶部)。如果远程master分支有新的提交,它们在本地master分支上不存在,则结果不同(本地master分支一个分支,另一分支origin/master分支)。

-1
git fetch origin 

只将远程文件从远程存储库下载到本地分支。

git rebase master 

需要整个分支(分支中的提交),并放在本地存储库的顶部。它改变了你的项目的历史。

git pull --rebase origin master 

git pull默认情况下,执行合并,但您可以强制它与rebase选项。

检查此link