我有一個本地(從未被推到遠程)特性分支F1從主有幾次提交製成。我似乎不明白這兩個動作之間的差異(F1是當前分支):Git的變基地方VS混帳拉--rebase起源
git fetch origin
git rebase master
和
git pull --rebase origin master
我的期望是,他們應該是等價的,但他們不是 - 產生不同的結果。
我的想法有什麼問題?
我有一個本地(從未被推到遠程)特性分支F1從主有幾次提交製成。我似乎不明白這兩個動作之間的差異(F1是當前分支):Git的變基地方VS混帳拉--rebase起源
git fetch origin
git rebase master
和
git pull --rebase origin master
我的期望是,他們應該是等價的,但他們不是 - 產生不同的結果。
我的想法有什麼問題?
git fetch origin
和git rebase master
將從F1
更改應用到本地master
分支。假設你的提交歷史類似以下爲第一(遠程master
分公司在遠程提交J
):
A---B---C---D---E master
\
F---G---H F1
當您執行git fetch origin
和git rebase master
,甚至origin/master
點J
,只會重訂的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
分支)。
git fetch origin
只將遠程文件從遠程存儲庫下載到本地分支。
git rebase master
需要整個分支(分支中的提交),並放在本地存儲庫的頂部。它改變了你的項目的歷史。
git pull --rebase origin master
git pull默認情況下,執行合併,但您可以強制它與rebase選項。
檢查此link