[英]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 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
,它也只会在本地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.