Git系列:关联分支的认识和设置

1,614 阅读4分钟

在使用 git pull时,如何知道要从远程仓库的哪个分支拉取;在使用 git push时,如何知道要推送到远程仓库的哪个分支。那么这里涉及到的知识就是————关联分支

认识关联分支

什么是关联分支

简单的来说,就是本地分支和远程分支建立一种映射关系。(可能是一对一,也可能是一对多的关系)。

 git checkout -b develop1 origin/dev
 git checkout -b develop2 origin/dev
 // 创建两个新分支,都是从远程分支dev拉取的,这时候就存在一对多的关系了。
 // 这里是指一个远程分支,对应多个本地分支

但是大多数的情况下,分支还是一对一的关系。

关联分支的目的

  • 使用 git pull 时, 拉取代码不需要指定远程分支名;
  • 使用 git push 时, 提交代码不需要指定远程分支名;

查看映射关系的两种方式:

方式一:命令式git branch -vv

git branch -vv

看上面的截图:

本地分支 dev 对应远程分支 dev

本地分支 master 对应远程分支 master

方式二:打开.git文件夹中的 config 文件

文件的形式

通过上面的两种方式,就会发现本地分支与远程分支的映射关系。

如果本地分支与远程分支没有关联的话,可以继续使用两种方式,看是处于什么状态。(自己动手试一试)

没有关联分支的情况

在没有被关联的分支上,操作 git pullgit push, 都是不会成功的。

  • 使用 git pull, 就会有以下的提示:

     See git-pull(1) for details.
     ​
         git pull <remote> <branch>
     ​
     If you wish to set tracking information for this branch you can do so with:
     ​
         git branch --set-upstream-to=origin/<branch> xxx
     // 意思是:使用git pull时,当前分支没有被关联,请使用 git pull的完整命令
     // 如果想关联分支,就是使用下面的命令。
    
  • 使用 git push,就会有以下的提示:

     fatal: The current branch xxx has no upstream branch.
     To push the current branch and set the remote as upstream, use
     ​
         git push --set-upstream origin xxx
     ​
     // 意思是: 当前分支xxx没有关联分支,如果想要push,就需要先关联,执行下面的命令。
    

设置关联分支

在上面分析没有被关联的分支下,git pull 和 git push, 都是不会成功的,并且有相应的提示。在提示中,有着以下两条命令:

 git branch --set-upstream-to=origin/xxx xxx
 git push --set-upstream origin xxx

这两条命令,有着相似的地方,那就是--set-upstream

在这里,--set-upstream 单词直接翻译也说不通; 那就简单理解:设置关联分支

命令一:

该命令的具体用法就是:

git branch --set-upstream-to=远程仓库名/远程分支名 本地分支名

举例

本地分支 test 分支没有被关联,远程分支有 master 和 dev两个分支;

那么使本地分支 test 与 远程分支 master 进行关联,该怎么写呢?

 git branch --set-upstream-to=origin/master test

命令二:

该命令的具体用法就是:

git push --set-upstream 远程仓库名 远程分支名

举例

站在 test 本地分支上操作,想要与远程分支 dev 相互关联。

 git push --set-upstream origin dev // test分支上操作

这样本地分支test和远程分支dev相互关联。

执行完上面的命令后,都可以使用 git branch -vv 来查看关联的情况。

上面的两条命令就是针对使用 git pull 和 git push,出现的异常情况下。但是在一般情况下,在创建分支的时候,就会进行相应的操作与远程的分支相互关联。

情况一:

基于远程分支 XXX 创建一个本地分支YYY。(前提条件: 远程分支 XXX 必须存在)

 git checkout -b YYY origin/XXX
 // 这样本地分支YYY 与 远程分支 XXX 就相互关联了

情况二:

先创建一个新的本地分支XXX,然后手动推送到远程分支上。

 git checkout -b XXX
 git push -u origin XXX

这样本地分支 XXX 与远程分支 XXX 相互关联了。

 git push -u origin xxx // 把 xxx 推送到远程仓库,并关联。
 ​
 // 等价于(下面的两条命令)
 git push origin xxx // 把 xxx 推送到远程仓库,但是并没有关联
 git branch --set-upstream-to=origin/xxx xxx // 远程分支 xxx 与本地分支 xxx 相互关联

取消关联分支

取消关联分支

 git branch --unset-upstream

站在当前的分支上,解除当前分支的远程关联。

总结

关联分支:本地分支与远程分支的一种映射关系。

关联分支大致的使用场景如下:

  • 基于远程分支yyy创建一个新分支xxx:git checkout -b xxx origin/yyy
  • 创建一个新分支,然后推送:git checkout -b xxx git push -u origin xxx
  • 拉取时,发现没有关联:git branch --set-upstream-to=origin/xxx xxx
  • 推送时,发现没有关联:git push --set-upstream origin xxx

认识关联分支和关联分支的命令差不多就是这样了。如果有错或则没有说全,请指教。