在使用push时,我们要特别注意分支的名称和”关联分支"对于操作的影响;
1.git push 2.git push origin <remote_branch> 3.git push origin <local_branch>:<remote_branch>
测试起始环境: 远程仓库有两个分支:master和dev 本地仓库由一个分支:master 注:本次只使用dev分支进行演示 [email protected] MINGW64 /e/02.Workspace-test/gitTest (master) $ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/master
1.git push origin <local_branch>:<remote_branch>
场景:将本地分支推送到远程不同名的分支; 作用:将指定的本地分支推送到指定的远程分支;(这两个分支并没有建立关联关系,且可以不同名)
无论是 git push
还是git push local_branch
,都需要本地分支与远程分支同名,当需要将本地分支推送到远程不同名分支,则需要使用这种方式;
[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev) $ git push origin dev:dev_zcz
同步本地的dev和远端的master分支,这样同步后本地的master分支可能会“落后”远程的分支;
2.git push origin <local_branch>
场景:同步指定分支(非当前分支)到远程分支,如果是当前分支则<local_branch>可以省略 作用:"同步"指定的本地分支到远程关联同名分支;
介绍git push
时,对这种情况作了说明,当你想要把非当前分支推送到其关联的远程分支,可以使用这种方法。
[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev) $ git push origin dev_zcz
上述示例,把本地的dev_zcz分支,同步到远端的dev_zcz分支;
特别注意: 1.如果本地dev_zcz的关联分支与dev_zcz名称不一样,则会在远程新建一个dev_zcz分支; 2.新建的远程dev_zcz分支并不会与本地的dev_zcz分支建立关联关系;(本地的dev_zcz还关联的是其检出时的那个分支) 3.如果想在检出时建立分支,需要使用git push -u dev_zcz这样同步时就会关联新创建的远程分支;
3.git push
场景:当前分支已经有关联分支,并且关联分支与当前分支同名; 作用:将当前分支代码同步到远程同名分支;
首先从远程dev分支检出一个不同名的分支dev_zhangcz:
[email protected] MINGW64 /e/02.Workspace-test/gitTest (master) $ git checkout -b dev_zhangcz origin/dev Switched to a new branch ‘dev_zhangcz‘ Branch dev_zhangcz set up to track remote branch dev from origin. [email protected] MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz) $ git branch * dev_zhangcz master git checkout -b dev_zhangcz origin/dev #在本地创建一个 dev_zhangcz 分支,并拉去远端的origin/dev
这样我们本地就有了一个和远程"dev"相关联的分支"dev_zhangcz",此时我们执行git push会怎么样呢?
[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz) $ git push fatal: The upstream branch of your current branch does not match the name of your current branch. To push to the upstream branch on the remote, use git push origin HEAD:dev To push to the branch of the same name on the remote, use git push origin dev_zhangcz To choose either option permanently, see push.default in ‘git help config‘.
报错的大意思就是:你当前分支的关联分支(upstream branch)与你分支的名字不匹配(not match);
我们在使用git branch -vv
查看一下dev_zhangcz分支的关联分支:
[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz) $ git branch -vv * dev_zhangcz 3b7001a [origin/dev] cm master 941758f [origin/master] master new
确实dev_zhangcz关联的分支(dev)名字和它不一样;git给出的解决方案
1.push到HEAD分支;
2.push到远程同名的分支(新建);
通常情况下,我们选择方案2,但如果你就是想要push到origin/dev分支,也可以选择重命名当前分支,然后重新执行git push
;或者使用git push origin dev
[email protected] MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz) $ git branch -m dev_zhangcz dev [email protected] MINGW64 /e/02.Workspace-test/gitTest (dev) $ git push Everything up-to-date
结论:当使用git push
执行默认推送时,本地分支需与"关联分支"同名才可以;
深入push.default
在git的全局配置中,有一个push.default属性,其决定了git push
操作的默认行为。
push.default 有以下几个可选值: nothing, current, upstream, simple, matching
nothing: 直接push会出错,需要显式的指出推送的远程分支,例如:git push origin <remote_branch>; current: 推送时只会推送当前所在的分支到远程同名分支,如果远程分支不存在相应的同名分支,则创建该分支; upstream: 推送当前分支到它的upstream分支上,这个模式只适用于推送到与拉取数据相同的仓库(比如central workflow); simple(默认): simple和upstream是相似的,只有一点不同,simple必须保证本地分支和它的远程 upstream分支同名,否则会拒绝push操作。 matching:推送本地和远程都存在的同名分支。
链接:https://www.jianshu.com/p/1abad73f8161 来源:简书
原文地址:https://www.cnblogs.com/weidaijie/p/10893569.html