本地新增了一个分支,远程仓库上还没有,要把新分支推送到远程仓库。
例如,本地新增分支dev
,如果使用git push
命令,尝试将更改推送到远程仓库,会报以下错误:
$ git push
fatal: The current branch dev has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin dev
原因是远程仓库中不存在本地新建分支dev
的上游分支。
上游分支 – 对应于本地分支的远程分支。
所以在推送时,必须设置并创建上游分支:
git push --set-upstream origin dev
示例
Kevin@qikegu MINGW64 /g/project/git-demo (master)
$ git push --set-upstream origin dev
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 545 bytes | 181.00 KiB/s, done.
Total 6 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
remote:
remote: Create a pull request for 'dev' on GitHub by visiting:
remote: https://github.com/kevinhwu/git-demo/pull/new/dev
remote:
To https://github.com/kevinhwu/git-demo.git
* [new branch] dev -> dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
在完成这些之后,查看github上的远程仓库,可以看到新分支已经存在,其他人可以使用了。
注意:有时候本地分支要连接远程仓库中已经存在的分支,可以使用
git branch --set-upstream-to=origin/dev
– 为本地分支dev
设置一个新的上游分支。
远程跟踪分支
远程跟踪分支位于本地仓库中,是对远程分支的引用。
远程跟踪分支是只读的,远程跟踪分支可以理解为远程分支在本地的只读镜像。远程跟踪分支以 (remote)/(branch)
形式命名,例如origin/master
。
如果一个分支有上游分支(远程分支),就会在本地创建远程跟踪分支。
在推送新增分支时,会自动创建远程跟踪分支。推送过程如下所示:
想查看本地分支和远程跟踪分支,可以使用git branch -a
。
Kevin@qikegu MINGW64 /g/project/git-demo (master)
$ git branch -a
dev
* master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/master
“origin” 并无特殊含义
远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样。 同时 “master” 是当你运行 git init 时默认的起始分支名字,原因仅仅是它的广泛使用,“origin” 是当你运行 git clone 时默认的远程仓库名字。 如果你运行 git clone -o booyah,那么你默认的远程分支名字将会是 booyah/master。