Git rebase local vs git pull --rebase origin
Posted
技术标签:
【中文标题】Git rebase local vs git pull --rebase origin【英文标题】: 【发布时间】:2017-12-07 23:03:23 【问题描述】:我有一个由 master 制成的本地(从未推送到远程)功能分支 F1很少提交。我似乎不明白这两个动作之间的区别(F1 是当前分支):
git fetch origin
git rebase master
和
git pull --rebase origin master
我的期望是它们应该是等价的,但事实并非如此 - 会产生不同的结果。
我的想法有什么问题?
【问题讨论】:
【参考方案1】: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
,它只会将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
分支同步,这两种方式的结果相同(将F1
分支重新设置在master 分支的顶部)。如果远程master
分支有新的提交,而本地master
分支上不存在,则结果不同(一个基于本地master
分支,另一个基于origin/master
分支)。
【讨论】:
【参考方案2】:git fetch origin
仅将远程文件从远程存储库下载到本地分支。
git rebase master
获取整个分支(分支中的提交),并放在本地存储库的顶部。它会改变您项目的历史。
git pull --rebase origin master
git pull 默认执行合并,但你可以使用 rebase 选项强制它。
查看link
【讨论】:
以上是关于Git rebase local vs git pull --rebase origin的主要内容,如果未能解决你的问题,请参考以下文章