当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,

  并且,远程仓库的默认名称是origin

  如果是本地仓库关联远程仓库

    

---

  要查看远程库的信息,用git remote

      $ git remote

     

 或者,用git remote -v显示更详细的信息

    

    上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

-----

推送分支

  推送分支,就是把该分支上的所有本地提交推送到远程库。

  推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上

      $ git push origin master

        

  如果要推送其他分支,比如dev,就改成:   

        $ git push origin dev

      

-------

  但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

     master分支是主分支,因此要时刻与远程同步;

     dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

     bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

     feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

   总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

---------

抓取分支

  多人协作时,大家都会往masterdev分支上推送各自的修改。

   现在,模拟一个你的小伙伴,可以在另一台电脑(注意要把SSH Key添加到GitHub)或者同一台电脑的另一个目录下克隆

    

----------

  当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支

  不信可以用git branch命令看看:

   

-----------

  现在,你的小伙伴要在dev分支上开发,就必须创建远程origindev分支到本地

   于是他用这个命令创建本地dev分支:  基于远程分支创建本地分支

        $ git checkout -b dev origin/dev

    

------------

  现在,他就可以在dev上继续修改,然后,时不时地把dev分支push到远程:

    

    

    

-------------

  你的小伙伴已经向origin/dev分支推送了他的提交,

   而碰巧你也对同样的文件作了修改,并试图推送:

    

    发现推送失败了

     

----------------

  因为你的小伙伴的最新提交和你试图推送的提交有冲突

  解决办法也很简单,Git已经提示我们,

  先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送

    

  git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置devorigin/dev的链接:

    $ git branch --set-upstream-to=origin/dev dev

  

  再pull:

    

  这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push:

-------------------

  因此,多人协作的工作模式通常是这样:

    1.   首先,可以试图用git push origin <branch-name>推送自己的修改;

    2.   如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

    3.   如果合并有冲突,则解决冲突,并在本地提交;

    4.   没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

   如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,

   用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

小结

  • 查看远程库信息,使用git remote -v

  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;

  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  • 建立本地分支和远程分支的关联,使用 $ git branch --set-upstream-to=origin/dev dev

  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

Git 分支管理 多人协作 远程仓库 补充的更多相关文章

  1. git 分支管理——多人协作

    git 分支管理--多人协作 一般一个项目有一个master主分支,还有一个develop开发分支.主要是在develop分支上协作开发,然后merge合并到master主分支上. 当从远程仓库克隆时 ...

  2. [廖雪峰] Git 分支管理(3):分支管理策略

    通常,合并分支时,如果可能,Git 会用 Fast forward 模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制 禁用 Fast forward 模式,Git 就会在 merge 时生 ...

  3. Git学习总结(12)——多人开发 Git 分支管理详解

    1.前言 在上一篇博客中我们主要讲解了Git 远程仓库,相信大家对远程的Git仓库有一定的了解,嘿嘿.在这一篇博客中我们来在大家讲解一下Git 分支管理,这可以说是Git的又一大特点.下面我们就来学习 ...

  4. Git版本控制工具(三)----远程仓库GitHub的使用

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. Git 分支管理详解

    大纲: 1.前言 2.创建分支 3.切换分支 4.合并分支(快速合并) 5.删除分支 6.分支合并冲突 7.合并分支(普通合并) 8.分支管理策略 9.团队多人开发协作 10.总结 注,测试机 Cen ...

  6. Git版本控制之多人协作

         上篇文章我们主要简单的介绍了有关git的一些基本常识和一些简单的命令.但那终究是皮毛,我们使用git最主要的目的还是管理我们的项目,多人协作.本篇文章主要涉及以下两个大模块: 分支的概念及原 ...

  7. git学习------>Git 分支管理最佳实践

    ps:本文转载于 : https://www.ibm.com/developerworks/cn/java/j-lo-git-mange/index.html Git 是目前最流行的源代码管理工具.大 ...

  8. 团队项目的Git分支管理规范

    原文地址: http://blog.jboost.cn/2019/06/17/git-branch.html 许多公司的开发团队都采用Git来做代码版本控制.如何有效地协同开发人员之间,以及开发.测试 ...

  9. Git工程开发实践(四)——Git分支管理策略

    A successful Git branching model https://nvie.com/posts/a-successful-git-branching-model/ Git工程开发实践( ...

随机推荐

  1. BZOJ3878: [Ahoi2014&Jsoi2014]奇怪的计算器

    BZOJ3878: [Ahoi2014&Jsoi2014]奇怪的计算器 Description [故事背景] JYY有个奇怪的计算器,有一天这个计算器坏了,JYY希望你能帮助他写 一个程序来模 ...

  2. 我的Java开发学习之旅------>在Dos环境下Java内部类的编译和运行

    习惯了在IDE工具上进行代码编写,连最基本的Javac命令和Java命令都忘记的差不多了,今天对一个Java内部类进行编译和运行的时候,就出糗了.IDE是把双刃剑,它可以什么都帮你做了,你只要敲几行代 ...

  3. Java for LeetCode 137 Single Number II

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  4. IOS 关于 NSUserDefault

    转载 并不是所有的东西都能往里放的.NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.   NSUserDefa ...

  5. Android环境下通过C框架层控制WIFI【转】

    本文转载自:https://blog.csdn.net/edw200/article/details/52192631 本人是从事Linux嵌入式开发的,安卓wifi控制在安卓JAVA层已经做得非常成 ...

  6. make和rest用法

    位置(position):下一个要读取或写入的数据的索引.缓冲区的位置不能为负,并且不能大于其限制(limit). 标记(mark)与重置(reset):标记是一个索引,通过Buffer中的mark( ...

  7. java.sql.SQLException: Access denied for user 'somebody'@'localhost' (using password: YES)

    用mybatis和spring整合时出现了一个错误: 我是在IntelliJ IDEA上整合Mybatis和Spring的,运行测试用例出现了如上错误. 红色的马赛克部分是我的名字. 问题是,我的数据 ...

  8. Hadoop HA- zookeeper安装配置

    安装集群 1.1 虚拟机: 3台安装好JDK的centos Linux虚拟机 1.2 安装包: 把下载好的zookeeper安装包,官网:http://mirror.bit.edu.cn/apache ...

  9. SGU 495 Kids and Prizes:期望dp / 概率dp / 推公式

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=495 题意: 有n个礼物盒,m个人. 最开始每个礼物盒中都有一个礼物. m个人依次随 ...

  10. laravel基础课程---9、视图(lavarel的模板语法和tp相比怎样)

    laravel基础课程---9.视图(lavarel的模板语法和tp相比怎样) 一.总结 一句话总结: lavarel的模板语法比thinkphp好用很多:和html代码配合的更好 lavarel比t ...