在使用 git pull时,如何知道要从远程仓库的哪个分支拉取;在使用 git push时,如何知道要推送到远程仓库的哪个分支。那么这里涉及到的知识就是————关联分支。
认识关联分支
什么是关联分支
简单的来说,就是本地分支和远程分支建立一种映射关系。(可能是一对一,也可能是一对多的关系)。
git checkout -b develop1 origin/dev
git checkout -b develop2 origin/dev
// 创建两个新分支,都是从远程分支dev拉取的,这时候就存在一对多的关系了。
// 这里是指一个远程分支,对应多个本地分支
但是大多数的情况下,分支还是一对一的关系。
关联分支的目的
- 使用 git pull 时, 拉取代码不需要指定远程分支名;
- 使用 git push 时, 提交代码不需要指定远程分支名;
查看映射关系的两种方式:
方式一:命令式git branch -vv
看上面的截图:
本地分支 dev 对应远程分支 dev
本地分支 master 对应远程分支 master
方式二:打开.git文件夹中的 config 文件
通过上面的两种方式,就会发现本地分支与远程分支的映射关系。
如果本地分支与远程分支没有关联的话,可以继续使用两种方式,看是处于什么状态。(自己动手试一试)
没有关联分支的情况
在没有被关联的分支上,操作 git pull 和 git 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 xxxgit push -u origin xxx - 拉取时,发现没有关联:
git branch --set-upstream-to=origin/xxx xxx - 推送时,发现没有关联:
git push --set-upstream origin xxx
认识关联分支和关联分支的命令差不多就是这样了。如果有错或则没有说全,请指教。