多人协作

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

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

  1. $ git clone git@github.com:michaelliao/learngit.git
  2. Cloning into 'learngit'...
  3. remote: Counting objects: , done.
  4. remote: Compressing objects: % (/), done.
  5. remote: Total (delta ), reused (delta ), pack-reused
  6. Receiving objects: % (/), done.
  7. Resolving deltas: % (/), done.

当你的小伙伴从远程库clone时,默认情况下,你的小伙伴只能看到本地的master分支。不信可以用git branch命令看看:

  1. $ git branch
  2. * master

现在,你的小伙伴要在dev分支上开发,就必须创建远程origindev分支到本地,于是他用这个命令创建本地dev分支:

  1. $ git checkout -b dev origin/dev

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

  1. $ git add env.txt
  2.  
  3. $ git commit -m "add env"
  4. [dev 7a5e5dd] add env
  5. file changed, insertion(+)
  6. create mode env.txt
  7.  
  8. $ git push origin dev
  9. Counting objects: , done.
  10. Delta compression using up to threads.
  11. Compressing objects: % (/), done.
  12. Writing objects: % (/), bytes | 308.00 KiB/s, done.
  13. Total (delta ), reused (delta )
  14. To github.com:michaelliao/learngit.git
  15. f52c633..7a5e5dd dev -> dev

推送失败

你的小伙伴已经向origin/dev分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送:

  1. $ cat env.txt
  2. env
  3.  
  4. $ git add env.txt
  5.  
  6. $ git commit -m "add new env"
  7. [dev 7bd91f1] add new env
  8. file changed, insertion(+)
  9. create mode env.txt
  10.  
  11. $ git push origin dev
  12. To github.com:michaelliao/learngit.git
  13. ! [rejected] dev -> dev (non-fast-forward)
  14. error: failed to push some refs to 'git@github.com:michaelliao/learngit.git'
  15. hint: Updates were rejected because the tip of your current branch is behind
  16. hint: its remote counterpart. Integrate the remote changes (e.g.
  17. hint: 'git pull ...') before pushing again.
  18. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

推送失败,则因为远程分支比你的本地更新,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,再推送:

  1. $ git pull
  2. There is no tracking information for the current branch.
  3. Please specify which branch you want to merge with.
  4. See git-pull() for details.
  5.  
  6. git pull <remote> <branch>
  7.  
  8. If you wish to set tracking information for this branch you can do so with:
  9.  
  10. git branch --set-upstream-to=origin/<branch> dev

拉取失败

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

  1. $ git branch --set-upstream-to=origin/dev dev
  2. Branch 'dev' set up to track remote branch 'dev' from 'origin'.

再pull:

  1. $ git pull
  2. Auto-merging env.txt
  3. CONFLICT (add/add): Merge conflict in env.txt
  4. Automatic merge failed; fix conflicts and then commit the result.

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

  1. $ git commit -m "fix env conflict"
  2. [dev 57c53ab] fix env conflict
  3.  
  4. $ git push origin dev
  5. Counting objects: , done.
  6. Delta compression using up to threads.
  7. Compressing objects: % (/), done.
  8. Writing objects: % (/), bytes | 621.00 KiB/s, done.
  9. Total (delta ), reused (delta )
  10. To github.com:michaelliao/learngit.git
  11. 7a5e5dd..57c53ab dev -> dev

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

  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复习(五)之多人协作、git push失败、git pull失败的更多相关文章

  1. git学习笔记11-git多人协作-实际多人怎么开发

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git r ...

  2. git分支管理之多人协作

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git r ...

  3. Git详细教程(2)---多人协作开发

    Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...

  4. GIT 分支管理:多人协作

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git r ...

  5. Git 基础教程 之 多人协作

           多人协作时,从远程克隆时,默认情况下,只能看到master分支 git checkout -b dev origin/dev 创建远程origin的dev分支到本地 git branch ...

  6. git 如何实现进行多人协作开发(远程仓库)

    第一.Git作为分布式的版本控制系统,你是你本地仓库的主人,但是想要实现多人的协作开发,你就要将你本地的开发推送到远程共享仓库中供大家下载,本篇主要以github作为远程服务器来介绍有关远程仓库这块内 ...

  7. 如何利用 Git 与 GitHub 进行多人协作开发

    方法一:添加 Collaborators Collaborators 类似于Team模式. Repository的拥有者Owner 可以直接添加合作者到自己的仓库中, 让合作者拥有几乎等同拥有者的权限 ...

  8. 记录git多人协作开发常用的流程,供新手参考

    声明:博主写的博客都是经过自己总结或者亲测成功的实例,绝不乱转载.读者可放心看,有不足之处请私信我,或者给我发邮件:pangchao620@163.com. 写作目的: 记录一下我看完廖学锋老师的gi ...

  9. 五、git学习之——分支管理策略、Bug分支、feature分支、多人协作

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

随机推荐

  1. Docker进阶-快速扩容

    1.命令方式 在创建好的Swarm集群中运行nginx服务,并使用--replicas参数指定启动的副本数. docker service create --replicas 3 -p 80:80 - ...

  2. C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  3. Spring Boot 线程池的使用和扩展 - 转载

    转载:http://blog.csdn.net/boling_cavalry/article/details/79120268 1.实战环境 windowns10: jdk1.8: springboo ...

  4. 网络通信框架之retrofit

    主页: [https://github.com/square/retrofit](https://github.com/square/retrofit) 注意: 使用Retrofit的前提是**服务器 ...

  5. Badge 标记

    出现在按钮.图标旁的数字或状态标记. 基础用法 展示新消息数量. 定义value属性,它接受Number或者String. <el-badge :value="12" cla ...

  6. springboot2.0---控制台打印Mybatis的SQL记录

    题记:每次使用mybatis出错,都不知道sql原因,debug也不出结果,索性将其打印出来,更加容易排错. 亲测有效,只需要将下面的logback.xml放置在resource目录下即可打印. 方式 ...

  7. [nginx]设置代理和静态资源目录

    upstream disconf { server ; #tomcat服务器的地址 } server { listen ; #监听端口 server_name localhost; #域名 index ...

  8. 根据json生成java实体类

    之前一篇讲过了XML转java实体对象,使用的是JAXB技术,今天给大家推荐一个在线转json到java实体对象: http://www.bejson.com/json2javapojo/new/ 转 ...

  9. [转] ansible批量执行命令展示

    [From] https://blog.csdn.net/zhydream77/article/details/81223805 ansible命令基础 • ansible <host-patt ...

  10. linux中为什么删除文件比创建文件要快,读取文件和删除文件的过程是什么?

    一.为什么删除文件比创建文件要快? 因为删除文件只是将bitmap位图表中将文件所占据的inode 和dacablock的使用状态从1变成0,相当于释放了这些快的使用权. 二.读取文件和删除文件的过程 ...