问题是:我在本地 repo 分支中的提交是否会在 master 之上,或者因为我已经推送了它,所以我会简单地到达全局 master/remote 分支的顶端?
如果“全局”是指“远程”,那么是的,您的本地分支将基于origin/master
. 请参阅下面的详细说明。
根据您的问题,您的存储库开始看起来像这样:
o---o--------------o
^ ^
master development
origin/master origin/development
您的本地master
分支与远程origin/master
分支同步;此外,您有一个带有 1 个提交的本地development
分支,您将其推送到远程存储库,从而创建origin/development
.
现在,假设您当前的分支是development
,如果您运行
git pull --rebase origin master
Git 将从origin
远程获取任何新对象并更新您的远程跟踪分支origin/master
:
origin/master
⌄
o---o---o
/
o---o--------------o
^ ^
master development
origin/development
然后,它将在更新的分支之上重新设置development
您当前的分支(在这种情况下) origin/master
:
origin/master development
⌄ ⌄
o---o---o--------------o'
/
o---o--------------o
^ ^
master origin/development
请注意,您的本地master
分支仍然指向它之前所做的相同提交 - 这是因为git pull
(合并或变基)的第二部分始终在当前分支上运行,在您的情况下development
。
现在,如果您要development
在拉取操作完成后推送本地分支,您将更新origin/development
远程跟踪分支以指向变基提交:
origin/development
origin/master development
⌄ ⌄
o---o---o--------------o'
/
o---o
^
master
同样,在您执行以下操作之前,您的本地master
是不变的:
git checkout master && git merge origin/master
该git pull
命令是一个复杂的野兽,因为它会根据您在调用它时所处的分支以及传递给它的参数来执行完全不同的事情。
以下是文档对带有三个参数的表单的说明:
接下来将远程分支合并到当前分支:
$ git pull origin next
这会暂时保留 next 的副本FETCH_HEAD
,并更新 remote-tracking 分支origin/next
。
我还建议阅读此答案,以更详细地解释git pull
在不同情况下的行为方式。