第10月第10天 git

1.

多人协作

阅读: 493906


当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

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

$ git remote
origin

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

$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)

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

推送分支

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push origin master

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

$ git push origin dev

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

  • master分支是主分支,因此要时刻与远程同步;
  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

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

抓取分支

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

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

$ git clone git@github.com:michaelliao/learngit.git
Cloning into ‘learngit‘...
remote: Counting objects: 46, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 46 (delta 16), reused 45 (delta 15)
Receiving objects: 100% (46/46), 15.69 KiB | 6 KiB/s, done.
Resolving deltas: 100% (16/16), done.

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

$ git branch
* master

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

$ git checkout -b dev origin/dev

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

$ git commit -m "add /usr/bin/env"
[dev 291bea8] add /usr/bin/env
 1 file changed, 1 insertion(+)
$ git push origin dev
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 349 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:michaelliao/learngit.git
   fc38031..291bea8  dev -> dev

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

$ git add hello.py
$ git commit -m "add coding: utf-8"
[dev bd6ae48] add coding: utf-8
 1 file changed, 1 insertion(+)
$ git push origin dev
To [email protected]:michaelliao/learngit.git
 ! [rejected]        dev -> dev (non-fast-forward)
error: failed to push some refs to ‘[email protected]:michaelliao/learngit.git‘
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. ‘git pull‘)
hint: before pushing again.
hint: See the ‘Note about fast-forwards‘ in ‘git push --help‘ for details.

推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:

$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:michaelliao/learngit
   fc38031..291bea8  dev        -> origin/dev
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream dev origin/<branch>

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

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

再pull:

$ git pull
Auto-merging hello.py
CONFLICT (content): Merge conflict in hello.py
Automatic merge failed; fix conflicts and then commit the result.

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

$ git commit -m "merge & fix hello.py"
[dev adca45d] merge & fix hello.py
$ git push origin dev
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 747 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To [email protected]:michaelliao/learngit.git
   291bea8..adca45d  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 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 branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013760174128707b935b0be6fc4fc6ace66c4f15618f8d000

时间: 2024-10-12 14:06:53

第10月第10天 git的相关文章

2014年10月28~10月30日,某大型医疗企业产品管理和产品经理体系建设咨询项目调研启动!

2014年10月28日上午,国内某大型医疗企业产品管理咨询项目调研正式启动!此次调研项目由杨学明老师担任项目经理,调研之前,客户方技术副总裁与杨老师做过多次沟通,并就此次调研的重点作了充分探讨.杨学明老师此前在医疗行业有丰富的产品管理经验,并曾领导某深圳企业完成多个医疗产品的规划与研发管理工作,此次调研一共派出两名顾问.在调研启动会上,杨老师介绍了此次调研的目的.目标和计划安排,并提出了需要大家配合的事项. 三天的调研,从企业副董事长到产业集团总经理,一共访谈人数22人次,针对该企业产品管理十分

2014年10月17~10月18日,杨学明老师《软件测试管理》实战班公开课在北京成功举办!

2014年10月17-18日,<软件测试管理>公开课在北京市朝阳区某酒店成功举办!来自互联网.机电.软件.仪表.物联网.医疗等企业的研发负责人和测试部门经理等参加了此次培训,此次培训由著名研发管理专家杨学明主讲,本次课程采用全程案例分析讲解,让学员从一开始就融入到软件测试的场景中去,根据测试中所遇问题进行针对性讲解和讨论:每一个知识点的讲解都有相应的工具和模板支撑,从而使学员所学的知识在工作中能真正使用起来,也解决了培训不能落地的难题: 培训结束后许多企业表示将引进杨老师的内训和咨询服务.

10月12日站立会议

项目名称:礼物挑选小工具 组名:飞天小女警 组长:沈柏杉 组员:程媛媛.韩媛媛.谭力铭 代码地址:SSH:[email protected]:shenbaishan/GIFT.git 站立会议: 时间:10月12日 会议内容:1.商讨开发环境 2.讨论功能需求 3.收集礼物图片等素材 4.构建项目GUI 主要技术:servlet.jsp.mvc模式. 工具:tomcat 8.0.jdk 1.7.myecplise.mysql. 技术难点:图片的服务器上传.前台后台乱码问题. 技术缺点:前端界面过

10月12号站立会议

项目名称:礼物挑选小工具 组名:飞天小女警 组长:沈柏杉 组员:程媛媛.韩媛媛.谭力铭 代码地址:SSH:[email protected]:shenbaishan/GIFT.git 站立会议: 时间:10月12日 会议内容:1.商讨开发环境 2.讨论功能需求 3.收集礼物图片等素材 4.构建项目GUI 主要技术:servlet.jsp.mvc模式. 工具:tomcat 8.0.jdk 1.7.myecplise.mysql. 技术难点:图片的服务器上传.前台后台乱码问题. 技术缺点:前端界面过

10月学习总结:选择合适的框架进行快速开发

前言: 9月没有写学习总结,9月份事情有点多,平时学习时间也太少,工作中也只是重复造了一些轮子,没啥可记录的,就没有总结了,直接大跃进,进行10月总结,如果10月再不总结,那就是大大跃进到11月了,哈哈哈. 一.选择合适的框架进行快速开发 任务简介: 10月份接了一项任务,做一个宝宝风采大赛,参数人员上传照片,拉亲朋好友进行投票,依据名次有各种奖励. 过程描述: 我作为主负责开发,一个前端做html辅助我.看了一下设计图,我们两个人,评估了一下项目,大概一周之内可以完成.想法总是很美好,现实实在

分享2019年10月和11月的面试经历

本人工作三年左右,坐标魔都浦东,技术一般,之前工作的项目组用的技术栈有点老,之前待过两家公司都是外包,本人从去年年底到面试前一直在 自学,最近选择跳槽.这里写一下简历的个人技能,项目不方便放出来 前端:JQuery.Bootstrap 数据库:MySQL.Oracle 框架:Spring MVC.Spring.SpringBoot等 中间件:Redis.RabbitMQ 微服务:Spring Cloud.Spring Cloud Alibaba 搜索引擎:Elasticsearch 本人目前面试

2014年10月MVP开始申请了~[截止时间:7月10日]

51CTO与微软中国合作长期为用户提供申请"微软最有价值专家"的平台希望有兴趣.资历的朋友以及正在朝这个方向努力的朋友能够积极参与只要您想参与我们将为您向微软推荐 微软最有价值专家MVP一年评选4次分别为每年的1月.4月.7月.10月.2014年10月的MVP申请截止时间是2014年7月10日. 申请MVP的午饭请下载2014年10月MVP申请表填好后发送到[email protected].我们会在每次MVP申请开始时把用户提交的申请表格推荐到微软中国相关部门 [注意事项]1.51C

Azure 10月新公布

Azure 10月新发布:F 系列计算优化实例,认知服务,媒体服务流式处理单元更名,Azure 镜像市场,FreeBSD 适用于Azure 虚拟机的全新 F 系列计算优化实例 Azure 虚拟机的全新系列 F 系列专为计算密集型工作负荷优化设计,它基于 2.4 GHz Intel Xeon E5-2673 v3 (Haswell) 处理器,可达到接近 Intel Turbo Boost Technology 2.0 高达 3.2 GHz 的时钟速度.这些大小不仅具有与 Dv2 系列相同的 CPU

10月18日随笔

1 #include<iostream> 2 #include<algorithm> 3 #include<cmath> 4 #include<cstring> 5 #include<cstdio> 6 #include<queue> 7 using namespace std; 8 typedef long long LL; 9 inline int read() 10 { 11 int x=0,f=1;char c=getchar