我一直在审查一些Git基础知识,并且在有关pulling, merging and rebasing的Atlassian文档中,有一件事我不太了解。分支的基本状态如下(页面上有实际图像,我无法以自己的声誉发布它们):
A - B - C (Master on remote origin)
/
(Local origin/master) D - E - F - G (Local master)
现在,我们要从远程提取更改并重新设置其基准。通过阅读其他文档并尝试变基,我可以期望git pull --rebase
将在E-F-G
之上重播提交A-B-C
。但是取而代之的是Atlassian教程说结果看起来像这样:
A - B - C (Master on remote origin)
/
(Local origin/master) D - E - F - G - A - B - C (Local master)
因此,远程更改重新基于本地分支。我认为它不是那样工作的(至少不是没有特殊命令),而且它似乎比其他方法更具侵入性。如果您现在要推送,那么您毕竟会重写很多遥控器的历史记录。
这里的文档是否正确?在哪种情况下会发生这种情况?大多数描述似乎暗示或表明已获取远程分支,而本地分支基于该分支重新建立了分支,这似乎也最有意义。
我想我一定是在误解某些东西,或者是我误读了数字。
答案 0 :(得分:2)
您完全正确,该教程是错误的。您期望(观察到的)就是git pull --rebase
所做的。 Git文档在man git-pull
中说:
-r --rebase[=false|true|merges|preserve|interactive]
为true时,将当前分支重新置于上游分支之上 提取后。如果有一个对应的远程跟踪分支 自上次以来,上游分支机构和上游分支机构已重新设置了基础 提取后,rebase使用该信息来避免重新定位非本地 变化。
使用当前分支指的是本地签出的分支,而上游分支指的是远程分支。请注意,--rebase
等效于--rebase=true
。