一、本地→远程

GitHub上默认只有一个master分支,这个大家都清楚。不过,当我们在本地创建一个新的分支,比如叫kenny-feng,然后想把本地这个分支的内容推送到远程时,事情就没那么简单了。

Git本地分支和GitHub远程分支的关联问题

直接执行git push,会收到一个报错:

The current branch kenny-feng has no upstream branch

(当前分支没有上流分支)

原因很简单:这个分支目前只在本地存在,远程仓库里压根没有它。

解决办法就是给它设置一个上流分支(也就是关联远程分支)。有两种方式:

执行之后,效果如下:

Git本地分支和GitHub远程分支的关联问题

Git本地分支和GitHub远程分支的关联问题

注意,每一个本地分支关联远程分支时,都会产生一个“感知分支”(也就是远程追踪分支):

Git本地分支和GitHub远程分支的关联问题

到这里会发现,本地仓库的master分支还没有关联远程的master分支,而kenny-feng分支是在push的时候顺手设置了关联。

二、远程→本地

反过来,如果远程已经有了一个dev分支,但本地还没有,想要在本地创建并关联,也有两种常见做法。

方法1:先pull下来(或用fetch),再创建并关联

第一步:git pull origin dev,把远程的dev分支拉下来。如果直接用git pull,它会拉取所有分支,本地仓库里就会产生该分支的感知分支:

Git本地分支和GitHub远程分支的关联问题

但此时本地还没有真正的dev分支:

Git本地分支和GitHub远程分支的关联问题

第二步:在本地创建dev分支,并绑定到origin/dev。有两种写法:

第一个dev是本地分支名,可以改,但建议和远程分支名保持一致。简写版本:git checkout --track origin/dev(省略本地分支名,创建后的分支名称会自动与最后一个dev保持一致)。

如果只想创建并关联,但不切换,可以把git checkout -b换成git branch dev,后面参数不变。

结果如下:

Git本地分支和GitHub远程分支的关联问题

commitID一致,说明关联成功。

方法2:pull的同时就创建并关联

一条命令搞定:git pull origin dev1:dev2

一个常见问题:master分支还没有关联,就像下面这样:

Git本地分支和GitHub远程分支的关联问题

切回master,执行git push,会提示:

fatal: The current branch master has no upstream branch

解决思路:虽然一开始在本地创建了master分支,但从未push过,所以没有关联。有人可能想通过合并origin/master来解决问题,但合并不等于关联;也有人尝试pull最新代码,但pull只会更新本地的origin/master,而master和origin/master之间依然没有关联关系。正确的做法是——通过push来设置上流分支:

Git本地分支和GitHub远程分支的关联问题

总结

本地分支与远程分支的关联,本质上就是建立一条“上游”指向。无论是本地先有分支推送到远程,还是远程先有分支拉取到本地,核心都是要让本地分支知道该往哪个远程分支推送。理解了这个逻辑,遇到类似提示就不会慌了。

本文转载于:https://www.jb51.net/program/368356ner.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。