我是否正确理解git push和git pull?

时间:2017-01-19 04:05:21

标签: git github

例如,我有这些分支:

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

  1. git pull会将本地主人更新为origin/master,本地开发为origin/develop,是吗?

1 个答案:

答案 0 :(得分:1)

  

无论我在哪个分支,git push origin开发都会推动本地开发到源/开发?

右。

  

那么当我在其他分支时,如何将原点/发展拉到本地发展?

git pull = git fetch + git merge

您可以git fetch - 这会将所有更改从remore repo获取到您的本地跟踪分支(例如origin/masterorigin/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

相关问题