繁体   English   中英

Git rebase local vs git pull --rebase origin

[英]Git rebase local vs git pull --rebase origin

我有一个本地(从未推送到远程)功能分支F1master制作,并进行了一些提交。 我似乎不明白这两个操作之间的区别( 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 ,它也只会在本地master分支的顶部重新设置F1分支(如图所示提交E ):

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

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

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

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

git fetch origin

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

git rebase master

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

git pull --rebase origin master

默认情况下 git pull 执行合并,但您可以使用 rebase 选项强制它。

检查此链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM