一、新建分支执行 git push
- 初始化一个本地仓库。
- 将本地仓库上传到远程仓库。
- 查看本地仓库和远程仓库的分支信息。
- 在本地仓库创建一个新的分支,此时本地仓库的分支与远程仓库没有任何关系。
- 在本地仓库的 feature-1 分支上做修改。
- 直接执行命令
git push
,报错提示:当前分支 feature-1 没有上游分支。 - 原因是:此时本地仓库的 feature-1 分支,和远程仓库的 feature-1 分支 没有关联。
二、分析
- 首先我们在远程仓库上创建 dev 分支。
- 在本地仓库联网更新远程仓库的最新状态。
- 可以看到,远程仓库的 dev 分支已经记录在本地仓库了。
- 切换到 dev 分支,显示:本地仓库的 dev 分支和远程仓库的 dev 分支是关联的。
- 可以看到,我们在本地仓库的 dev 分支执行
git push
是不会报错的。 - 原因是:本地仓库的 dev 分支和远程仓库的 dev 分支是关联,执行
git push
,git 自动就明白:我们是希望将本地仓库的 dev 分支推送到远程仓库的 dev 分支。
- 而 feature-1 分支没有跟远程仓库的分支有关联,所以直接执行
git push
会报错。 - 可以看到,git 提示我们使用命令:git push --set-upstream origin feature-1。
- 这个 --set-upstream 参数,就是关联远程仓库的意思。
- 我们看看不使用 --set-upstream 参数的效果。
- 直接执行命令:git push origin feature-1,发现可以推送。
- 而且
git branch -a
可以看到,本地仓库也记录了远程仓库的 feature-1 分支:origin/feature-1。
- 但是我们还是发现有问题:
- 本地仓库的 feature-1 分支跟远程仓库没有关联;
- 但是本地仓库的 master 分支和 dev 分支都 能和远程仓库关联起来;
- 即, feature-1 分支没有关联上 origin/feature-1 分支。
- 我们先删除远程仓库上的 feature-1 分支。
- 可以看到,使用参数 -u ,就能让本地仓库和远程仓库的分支关联起来。
- 之后,我们再实验推送到远程仓库,就不再需要设置“上游信息”(参数 -u)了。
- 最后删除远程仓库的分支。