我有一个本地(从未被推到远程)特性分支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