例如,我有这些分支:
local remote
master -> origin/master (other users will update)
develop -> origin/develop (other users will update)
截至目前,master / develop指向同一个提交
假设我只有一个README文件,其内容为master
1,我关注
$ git checkout develop
$ echo 'develop' >> README && git commit -am 'aaa'
问题:
假设没有其他人改变origin/develop
,无论我在哪个分支,
git push origin develop
会将本地develop
推送到origin/develop
?
2,在1之后,成为这个:
local remote
master (README: master) -> origin/master (README: master)
develop(README: develop) -> origin/develop (README: develop)
接下来,有人改变了原点/开发:README到other develop
local remote
master (README: master) -> origin/master (README: master)
develop(README: develop) -> origin/develop (README: other develop)
所以如果我这样做
一个。 [在开发分支] $ git pull origin develop
我的本地开发:自述文件将变为other develop
B中。 [在主分支] $ git pull origin develop
我的本地开发:README不会改变,但我的本地主人:README将成为other develop
???
所以git pull origin develop
并不意味着将origin/develop
拉到本地/开发?
这意味着拉origin/develop
并合并到当前分支 ????
那么当我在其他分支时,如何将origin/develop
拉到本地develop
?
git pull
会将本地主人更新为origin/master
,本地开发为origin/develop
,是吗? 答案 0 :(得分:1)
无论我在哪个分支,git push origin开发都会推动本地开发到源/开发?
右。
那么当我在其他分支时,如何将原点/发展拉到本地发展?
git pull
= git fetch
+ git merge
您可以git fetch
- 这会将所有更改从remore repo获取到您的本地跟踪分支(例如origin/master
,origin/develop
)。
但你不能git merge
进入非当前分支,因为在合并期间可能会出现冲突,除非分支是最新的,否则你无法修复它们。
如果您正在为master工作并且想要将工作放在一边,合并develop分支然后继续您的工作,您可以执行以下操作:
git stash
git co develop
git pull
<resolve conflicts if any>
git ci
git co master
git stash apply
其中ci = commit,co = checkout。
git pull会将本地主人更新为origin / master和本地开发 来源/发展,是吗?
它将同时获取两者,但仅合并当前分支。
<强>更新强> 作为@ torek对该问题的评论的说明,这是一个更精确的方案。实际上还有比你更多的分支:
local repo remote repo
local branch remote tracking branch local branch
master (README: master) origin/master (README: master) <-> master (README: master)
devel (README: devel) origin/devel (README: devel) <-> devel (README: devel)
通常在没有工作树(git init --bare
)的情况下创建中心仓库(此方案中的远程仓库),因此它不具有远程分支,只有本地分支。 / p>
现在
git push:
local repo remote repo
local branch remote tracking branch local branch
master (README: master) ---------------------------------> master (README: master)
git fetch:
origin/master (README: master) <-- master (README: master)
git merge:
master (README: master)<-origin/master (README: master)
最后,git pull
= git fetch
+ git merge