2017-07-04 63 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