Git rebase local vs git pull --rebase origin

Git rebase local vs git pull --rebase origin

我有一个本地(从未推送到远程)功能分支 F1 来自 master 进行了几次提交。我似乎不明白这两个动作之间的区别(F1是当前分支):

git fetch origin
git rebase master

git pull --rebase origin master

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

我的想法有什么问题吗?

1. 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/master 指向 J,它只会 rebase F1 本地顶部的分支master 分支(如图所示提交 E):

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

2. 命令 git pull --rebase origin master 将首先从远程 master 分支拉取更改,然后将当前分支 F1 变基到顶部其中:

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

总之,如果本地master分支与远程master分支同步,这两种方式的结果是一样的(rebase F1分支在master分支之上) .如果远程 master 分支有新的提交,而本地 master 分支上不存在,结果是不同的(一个在本地 master 分支上变基,另一个在本地 master 分支上变基origin/master 分支)。

git fetch origin

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

git rebase master

获取整个分支(您分支中的提交),并将其放在本地存储库的顶部。它改变了您项目的历史。

git pull --rebase origin master

git 默认拉取,执行合并,但您可以使用变基选项强制执行。

检查这个 link