zoukankan      html  css  js  c++  java
  • Git14

    $ git push origin :master
    # 等同于
    $ git push origin --delete master

     

    上面命令表示删除origin主机的master分支。

    如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

    $ git push origin

    上面命令表示,将当前分支推送到origin主机的对应分支。

    如果是新建分支第一次push,会提示:
      fatal: The current branch dev1 has no upstream branch.
      To push the current branch and set the remote as upstream, use
      git push --set-upstream origin dev1
      输入这行命令,然后输入用户名和密码,就push成功了。

      以后的push就只需要输入git push origin

    原因是:

    复制代码
    #因为在git的全局配置中,有一个push.default属性,其决定了git push操作的默认行为。在Git 2.0之前,这个属性的默认被设为'matching',2.0之后则被更改为了'simple'。
    
    #我们可以通过git version确定当前的git版本(如果小于2.0,更新是个更好的选择),通过git config --global push.default 'option'改变push.default的默认行为(或者也可直接编辑~/.gitconfig文件)。
    
    push.default 有以下几个可选值:
    nothing, current, upstream, simple, matching
    
    其用途分别为:
    nothing - push操作无效,除非显式指定远程分支,例如git push origin develop(我觉得。。。可以给那些不愿学git的同事配上此项)。
    current - push当前分支到远程同名分支,如果远程同名分支不存在则自动创建同名分支。
    upstream - push当前分支到它的upstream分支上(这一项其实用于经常从本地分支push/pull到同一远程仓库的情景,这种模式叫做central workflow)。
    simple - simple和upstream是相似的,只有一点不同,simple必须保证本地分支和它的远程
    upstream分支同名,否则会拒绝push操作。
    matching - push所有本地和远程两端都存在的同名分支。
    因此如果我们使用了git2.0之前的版本,push.default = matching,git push后则会推送当前分支代码到远程分支,而2.0之后,push.default = simple,如果没有指定当前分支的upstream分支,就会收到上文的fatal提示。
    复制代码

    如果当前分支只有一个追踪分支,那么主机名都可以省略。

    $ git push

    如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push

    $ git push -u origin master

    上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

    不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。

    $ git config --global push.default matching
    # 或者
    $ git config --global push.default simple

    还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用--all选项。

    $ git push --all origin

    上面命令表示,将所有本地分支都推送到origin主机。

    如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用--force选项。

    $ git push --force origin 

    上面命令使用--force选项,结果导致远程主机上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用--force选项。

    最后,git push不会推送标签(tag),除非使用--tags选项。

    $ git push origin --tags

    5.4、在命令行中同步本地仓库示例

    假定我们创建好了一个远程仓库地址为:https://coding.net/u/zhangguo5/p/project7/git,现在我们在本地创建一个项目并同步到远程仓库中。

    1)、创建文件添加到暂存区

    2)、提交到本地仓库

    3)、提交到远程仓库

    添加远程主机地址:

    推送文件:

    结果:

    说明:这里我使用的是SSH方式提交的,所有并没有让我输入用户名与密码,如果你使用https方式提交则要配置用户名与邮箱,还要输入密码。

    5.5、IDEA中Git的使用

    工作中多人使用版本控制软件协作开发,常见的应用场景归纳如下:

    假设小组中有两个人,组长盖茨,组员艾伦

    场景一:盖茨创建项目并提交到远程Git仓库

    场景二:艾伦从远程Git仓库上获取项目源码

    场景三:艾伦修改了部分源码,提交到远程仓库

    场景四:盖茨从远程仓库获取艾伦的提交

    场景五:艾伦接受了一个新功能的任务,创建了一个分支并在分支上开发

    场景六:艾伦把分支提交到远程Git仓库

    场景七:盖茨获取艾伦提交的分支

    场景八:盖茨把分支合并到主干

    下面来看以上各场景在IDEA中对应的操作。

    场景一:盖茨创建项目并提交到远程Git仓库

    在IDEA中配置Git

    测试环境是否正常

    创建好项目,这里创建了一个Maven项目,结构如下,当然可以是任意项目:

    选择VCS - > Enable Version Control Integration,允许将项目集成到版本控制器中

    选择版本控制器类型

    完成后当前项目就变成一个Git项目,是工作空间

    点击OK后创建完成本地仓库,注意,这里仅仅是本地的。下面把项目源码添加到本地仓库。

    下图是Git与提交有关的三个命令对应的操作,Add命令是把文件从IDE的工作目录添加到本地仓库的stage区,Commit命令把stage区的暂存文件提交到当前分支的仓库,并清空stage区。Push命令把本地仓库的提交同步到远程仓库。

    IDEA中对操作做了一定的简化,Commit和Push可以在一步中完成。

    具体操作,在项目上点击右键,选择Git菜单,如果使用Add则将文件从工作空间提交到暂存库,Commit Directory则是同时完成提交到暂存与本地仓库。

     选择要提交的文件,填写消息

    将本地仓库的内容提交到远程仓库

     定义远程地址的别名

     

     输入名称与URL

     点击push将本地仓库的内容推送到远程服务器

     

     提示Push Successful就成功了

     提交后的远程库

     

    场景二:艾伦从远程Git仓库上获取项目源码

    即克隆项目,操作如下:

    输入盖茨Push时填写的远程仓库地址

    填写仓库地址、要克隆到的父目录与项目目录

    接下来按向导操作,即可把项目从远程仓艾伦隆到本地仓库和IDE工作区。

    当提示签出成功点击打开就可以看到项目了

    下载到本地的文件

    其它方法

    场景三:艾伦修改了部分源码,提交到远程仓库

    这个操作和首次提交的流程基本一致,分别是 Add -> Commit -> Push。请参考场景一

     添加一个类,并提交

    提交到本地仓库

    提交到远程仓库

    场景四:盖茨从远程仓库获取艾伦的提交

    获取更新有两个命令:Fetch和Pull,Fetch是从远程仓库下载文件到本地的origin/master,然后可以手动对比修改决定是否合并到本地的master库。Pull则是直接下载并合并。如果各成员在工作中都执行修改前先更新的规范,则可以直接使用Pull方式以简化操作。

    选择分支

    场景五:艾伦接受了一个新功能的任务,创建了一个分支并在分支上开发

    建分支也是一个常用的操作,例如临时修改bug、开发不确定是否加入的功能等,都可以创建一个分支,再等待合适的时机合并到主干。

    创建流程如下:

    选择New Branch并输入一个分支的名称

    创建完成后注意IDEA的右下角,如下图,Git: dev表示已经自动切换到dev分支,当前工作在这个分支上。

    点击后弹出一个小窗口,在Local Branches中有其他可用的本地分支选项,点击后选择Checkout即可切换当前工作的分支(见场景7操作切换其他分支)。

    如下图,点击Checkout

    注意,这里创建的分支仅仅在本地仓库,如果想让组长盖茨获取到这个分支,还需要提交到远程仓库。

    场景六:艾伦把分支提交到远程Git仓库

    切换到新建的分支,使用Push功能

    提交到远程

    艾伦将新开发的功能提交到远程

    提交到远程

    场景七:盖茨获取艾伦提交的分支

    使用Pull功能打开更新窗口,点击Remote栏后面的刷新按钮,会在Branches to merge栏中刷新出新的分支。这里并不想做合并,所以不要选中任何分支,直接点击Pull按钮完成操作。

     

    更新后,再点击右下角,可以看到在Remote Branches区已经有了新的分支,点击后在弹出的子菜单中选择Checkout as new local branch,在本地仓库中创建该分支。完成后在Local Branches区也会出现该分支的选项,可以按上面的方法,点击后选择Checkout切换。

    切换远程分支:

    切换本地分支:

    场景八:盖茨把分支合并到主干

    新功能开发完成,体验很好,项目组决定把该功能合并到主干上。

    切换到master分支,选择Merge Changes

    选择要合并的分支,点击Merge完成

  • 相关阅读:
    现在, Delphi 的多线程已经非常易用了!
    发现 TSplitter 在嵌套时不好用, 索性写了个替代品
    关于显示透空歌词的思路 回复 "zhaoboaidelphi" 的问题
    简单获取钢琴 88 个键的音高频率值
    准备理一下菜单和工具栏相关的组件
    在 StringGrid 上画线时, 使用 GDI+ 以消除锯齿 回复 "gsjn_8888_6666" 的问题
    解压 svgz 到 svg
    jQuery能做到,PHP能做到,C#也能做到
    监测ASP.NET应用程序性能最简单的方法
    支持高并发的IIS Web服务器常用设置
  • 原文地址:https://www.cnblogs.com/huaobin/p/14910304.html
Copyright © 2011-2022 走看看