(1).需要本地分支和远程分支建立映射关系
执行如下命令:
git checkout -b 本地分支xxx origin/远程分支xxx
例:git checkout -b master-20230228 origin/master-20230228
使用这种方式会在本地仓库新建本地分支xxx,并自动切换到新建的本地分支xxx,当然了远程分支xxx的代码也拉取到了本地分支xxx中。采用这种方法建立的本地分支会和远程分支建立映射关系。
(2).不需要本地分支和远程分支建立映射关系
执行如下命令:
git fetch origin 远程分支xxx:本地分支xxx
使用这种方式会在本地仓库新建本地分支xxx,但是并不会自动切换到新建的本地分支xxx,需要手动checkout,当然了远程分支xxx的代码也拉取到了本地分支xxx中。采用这种方法建立的本地分支不会和远程分支建立映射关系。
本地分支和远程分支是否建立映射关系有什么区别?
不知道大家有没有经历过,当我们切换到了一个新的分支想要提交代码的时候,总会遇到这样的错误:
当然如果我们push的时候执行的不是git push,而是后面再加上origin的话,就可以push成功了。比如这样:
什么情况下git push就可以,什么情况下需要加上origin呢?
这里涉及一个机制就是本地的分支是不会自动和远程同步的,比如远程有人创建了一个test分支,我们拉取到本地会叫做origin/test。我们也可以自己创建一个test分支,和它井水不犯河水。这也是为了方便,如果直接用名称映射的话,可能会有潜在的冲突。并且由于可能会存在多个远程repo,所以我们push的时候也会有多种选择。
最完整的push命令是应该写成这样的:
git push origin test:cz/test
我们注意到这里用了一个奇怪的写法test:cz/test,它的意思是说将本地的test分支推送到远程作为cz/test分支。如果我们想要本地的名称和远程一样,我们可以省略简写成:git push origin test。
如果我们设置过当前test分支的上游是远程的test,或者本地的test就是从origin拷贝过来的,那么我们可以直接git push,它会自动将本地的分支与远程关联上,会方便很多。
实际上我们大多数的push操作都是这么进行的。将本地分支和远程建立映射可以使用这个命令:
git branch --set-upstream-to master origin/master
它表示的是将本地的master和远程的master进行关联,设置过关联之后我们只需要git push和git pull就可以更新和推送这个分支了,会方便很多。