• Git的使用—git push的默认行为


    写于: 2016/2/19
    前记:有些时候在推送分支到远程仓库的时候,可以只打git push ,而有些时候则需要git push <repository> <本地分支>

    那么到底这个命令在什么时候简写,什么时候需要写全呢?

    参考文章:https://segmentfault.com/a/1190000002783245
    首先要知道的是:
    git push 的完整命令是: git push [<options>] [<repository> [<refspec>...]] 注:带有[]表示是可选项

        其实git 对于push操作有个default行为,但是根据git版本不同,push的默认行为是不同的;

        那么首先得确定自己的git版本是多少:

      > git --version  

    (如果忘记命令是什么,则先打git -help ,它会提示你的;只要会英语的,看见version,应该就明白该怎么做了)

      > git version 2.6.4.window.1 

    (笔者的版本是这个,就以这个为例)

      在Git的2.0之前,push.default属性默认被设为'matching',2.0之后被改成为'simple'。

     (当然这个属性也是可以指定的,具体方法见下)


     push.default的可选值:nothing , current , upstream , simple , matching

     注:push.default默认值的意思是只执行git push以后发生的操作

     各自的意义:

    •  nothing : 无默认操作,需要显示地指定远程分支;eg : git push origin branchname
    •  current :  push当前分支到远程同名分支,如果远程同名分支不存在则自动创建同名分支
    •  upstream : push当前分支到它的upstream分支上
    •  simple : 与upstream类似,但有一点不同,就是simple必须保证本地分支和它的远程分支upstream分支同名,否则会拒绝push操作。
    •  matching : push所有本地和远程两端都存在的同名分支

      查看分支的upstream命令: get config --get branch.<分支名>.remote

      例如:查看本地master分支的upstream

       > git config --get branch.master.remote

          origin

    再来解释一下upstream , 其实upstream和downstream是一对的,它的意思如下:

    假设有两个仓库A和B,当我们把仓库A中x分支的代码push到仓库B中的y分支上,则B中的y分支是A中的x分支的upstream;A中x分支是B中y分支的downstream。


    介绍完理论,介绍一下实际应用的情况:

    一般情况下,在实际的工作中,我们往往是从远程仓库中clone代码到自己的本地仓库。

    情况一:

    在本地的master上进行代码开发,此时本地分支与远程upstream分支是同名的。

     注:clone以后的本地master分支的upstream是origin 

    在master分支上进行n(n>0)次commit操作以后,执行git push命令以后,不管git的版本是什么,都可以push上去

    情况二:

     clone代码以后,在本地创建新的分支,在新分支上进行开发,同时push的时候也push新分支

     (关于新分支在push前要进行的fetch , merge等操作,来维持与远程仓库中的master保持一致,在以后的篇章中再细讲)

     创建新分支命令:

     >git branch new

     切换到新的分支

     > git checkout new 

     这两条命令也可以合并为一个命令:

     > git checkout -b new

    在new分支上进行n(n>0)次commit操作以后,执行git push命令以后,由于是第一次提交,远程上并不存在同名分支,也没有upstream,所以会报错(如下图):(其实git在提示错误的同时,已经提示你该怎么做了,真的好友好呀!)

       如果new分支在很长时间内都需要push,则可以在首次push的时候,加上-u(或者是 --set-upstream);

      > git push  -u origin 20160125-app-bc-pro  

      选项: -u / --set-upstream :是设置该分支(20160125-app-bc-pro)的upstream。

      要设置分支的upstream,也可以显示的设置:

      > git branch -u origin/20160125-app-bc-pro  (将当前的本地分支,追踪远程分支origin/20160125-app-bc-pro,即为当前分支设置upstream)

      也可以使用命令:

     > git branch --set-upstream-to=origin/20160125-app-bc-pro 20160125-app-bc-pro

     为本地20160125-app-bc-pro分支设置upstream。

     设置完以后,在以后的push操作中就可以直接执行git push操作啦!(前提是在20160125-app-bc-pro分支上提交,并且没有修改push.default默认值)

     如果想要删除分支的upstream信息,可以使用命令:

     > git branch --unset-upstream (删除当前分支的upstream信息) 


    当然如果你对git设置的push.default默认值有意见,或者不喜欢,或。。。想要改变它,也必须是可以的,命令是:

     例如要修改成nothing : 

     > git config --global push.default nothing

    (其实,这个命令git在刚才的报错提示中也已经显示给你啦!so智能,再赞一个!)

  • 相关阅读:
    【HAOI2014】走出金字塔
    【HAOI2008】圆上的整点
    LOJ #116 有源汇点有上下界的最大流
    ZOJ [P2314] 无源汇点有上下界模版
    最小费用最大流模版
    最大流模版 dinic
    最大流模版 EK
    HDU [P1533]
    HDU [2255] 奔小康赚大钱
    POJ [P2289] Jamie's Contact Groups
  • 原文地址:https://www.cnblogs.com/shixiaomiao/p/5201590.html
Copyright © 2020-2023  润新知