Git rebase local vs git pull --rebase origin

Use*_*rol 8 git version-control git-rebase branching-and-merging

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

git fetch origin
git rebase master
Run Code Online (Sandbox Code Playgroud)

git pull --rebase origin master
Run Code Online (Sandbox Code Playgroud)

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

我的想法有什么问题?

Mar*_*Liu 9

1. git fetch origin以及git rebase master将更改应用F1到当地的master分公司。假设您的提交历史最初如下所示(远程master分支已J在远程提交):

A---B---C---D---E    master
         \
          F---G---H  F1
Run Code Online (Sandbox Code Playgroud)

当您执行git fetch originand 时git rebase master,即使origin/master指向J,它也只会F1在本地master分支的顶部重新设置分支(E作为图表提交):

A---B---C---D---E(master)---J origin/master
                 \
                  F---G---H    F1
Run Code Online (Sandbox Code Playgroud)

2.该命令git pull --rebase origin mastermaster首先从远程分支拉取更改,然后F1在其顶部重新设置当前分支:

A---B---C---D---E---J      master,origin/master 
                     \
                      F---G---H  F1
Run Code Online (Sandbox Code Playgroud)

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