zoukankan      html  css  js  c++  java
  • git 实践(二) push的使用

    前言

    上一次我们详细讲解了git pull的三种使用方式,也介绍了什么是upstream(关联分支),这次我们来看看git push的使用;
    在使用push时,我们要特别注意分支的名称和”关联分支"对于操作的影响;

    1.git push
    2.git push origin <remote_branch>
    3.git push origin <local_branch>:<remote_branch>

    测试起始环境:
        远程仓库有两个分支:master和dev
        本地仓库由一个分支:master
    注:本次只使用dev分支进行演示
    
    zhangchangzhi@ZB-PF0SB6DQ 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

    场景:当前分支已经有关联分支,并且关联分支与当前分支同名;
    作用:将当前分支代码同步到远程同名分支;

    什么是关联分支:点击我
    首先从远程dev分支检出一个不同名的分支dev_zhangcz

    zhangchangzhi@ZB-PF0SB6DQ 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.
    
    zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz)
    $ git branch
    * dev_zhangcz
      master
    

    这样我们本地就有了一个和远程"dev"相关联的分支"dev_zhangcz",此时我们执行git push会怎么样呢?

    zhangchangzhi

    报错的大意思就是:你当前分支的关联分支(upstream branch)与你分支的名字不匹配(not match);
    我们在使用git branch -vv查看一下dev_zhangcz分支的关联分支:

    zhangchangzhi@ZB-PF0SB6DQ 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

    zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz)
    $ git branch -m dev_zhangcz dev
    
    zhangchangzhi@ZB-PF0SB6DQ 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:推送本地和远程都存在的同名分支。

    什么是upstream:点击我
    在git 2.0中,simple是push.default的默认值配置项(2.0以前的默认配置项是matching),因为该选项对于新手来说是最安全的。

    2.git push origin <local_branch>

    场景:同步指定分支(非当前分支)到远程分支,如果是当前分支则<local_branch>可以省略
    作用:"同步"指定的本地分支到远程关联同名分支;

    介绍git push时,对这种情况作了说明,当你想要把非当前分支推送到其关联的远程分支,可以使用这种方法。

    zhangchangzhi@ZB-PF0SB6DQ 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 origin <local_branch>:<remote_branch>

    场景:将本地分支推送到远程不同名的分支;
    作用:将指定的本地分支推送到指定的远程分支;(这两个分支并没有建立关联关系,且可以不同名)

    无论是 git push还是git push local_branch,都需要本地分支与远程分支同名,当需要将本地分支推送到远程不同名分支,则需要使用这种方式;

    zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (dev)
    $ git push origin dev:dev_zcz
    

    同步本地的dev和远端的master分支,这样同步后本地的master分支可能会“落后”远程的分支;



  • 相关阅读:
    [知识点]计算几何I——基础知识与多边形面积
    [旧版][知识点]SPFA算法
    [旧版][知识点]A*搜索(启发式搜索)
    [知识点]线段树
    [小工具]ChemistryHelper
    [考试]20150314
    [知识点]Cantor展开
    [旧版][知识点]拓扑排序
    [无效]网络流之Dinic算法
    [SCOI2005]扫雷Mine
  • 原文地址:https://www.cnblogs.com/jianxian/p/12650942.html
Copyright © 2011-2022 走看看