Git教程5(bug分支和多人协作及标签管理)

bug分支

  在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。 比如我在开发中接到一个404 bug时候,我们可以创建一个404分支来修复它,但是,当前的dev分支上的工作还没有提交。比如如下:

  并不是我不想提交,而是工作进行到一半时候,我们还无法提交,比如我这个分支bug要2天完成,但是我issue-404 bug需要5个小时内完成。怎么办呢?还好,Git还提供了一个stash功能,可以把当前工作现场 ”隐藏起来”,等以后恢复现场后继续工作。如下:

  所以现在我可以通过创建issue-404分支来修复bug了。首先我们要确定在那个分支上修复bug,比如我现在是在主分支master上来修复的,现在我要在master分支上创建一个临时分支,演示如下:

  修复完成后,切换到master分支上,并完成合并,最后删除issue-404分支。演示如下:

  现在,我们回到dev分支上干活了。

  工作区是干净的,那么我们工作现场去哪里呢?我们可以使用命令 git stash list来查看下。如下:

  工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,可以使用如下2个方法:

  1. git stash apply恢复,恢复后,stash内容并不删除,你需要使用命令git stash drop来删除。
  2. 另一种方式是使用git stash pop,恢复的同时把stash内容也删除了。 演示如下

小结:修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除; 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场

多人协作

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

  1. 要查看远程库的信息 使用 git remote
  2. 要查看远程库的详细信息 使用 git remote –v

推送通知

  推送分支就是把该分支上所有本地提交到远程库中,推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上: 使用命令 git push origin master,比如我现在的github上的read.txt代码如下:

本地的read.txt代码如下:

  现在我想把本地更新的read.txt代码推送到远程库中,使用命令如下:

  我们可以看到如上,推送成功,我们可以继续来截图github上的read.txt内容 如下:

  可以看到 推送成功了,如果我们现在要推送到其他分支,比如dev分支上,我们还是那个命令 git push origin dev,那么一般情况下,那些分支要推送呢?

  1. master分支是主分支,因此要时刻与远程同步。
  2. 一些修复bug分支不需要推送到远程去,可以先合并到主分支上,然后把主分支master推送到远程去。

抓取分支

  多人协作时,大家都会往master和dev分支上推送各自的修改。现在,模拟一个你的小伙伴,可以在另一台电脑(注意要把SSH Key添加到GitHub)或者同一台电脑的另一个目录下克隆

我在本地目录下新建一个文件夹来模拟另一个用户。

在此目录下克隆

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

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

将dev1分支push到远程

如果还是这个错误

那么先执行 git fetch。

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

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

推送失败

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

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

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

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

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

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
  5. 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

标签管理

  git里边默认的版本好不容易记。对于一些里程碑版本,需要记下来,此时可以使用标签,给项目的发布版本打标签,也是标签的一个重要功能之一

创建标签

在Git中打标签非常简单,首先,切换到需要打标签的分支上:

然后执行 git tag <name> 就可以打一个新标签

可以用命令git tag查看所有标签:

默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办? 方法是找到历史提交的commit id,然后打上就可以了:

比如要对’添加了一个文件同时修改了一个文件’打个标签

注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息:

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:

操作标签

删除标签

git tag -d <tagname>

推送标签到远程

  因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。如果要推送某个标签到远程,使用命令git push origin <tagname>

如果要一次性把所有标签推送到远程,可以如下:

删除远程标签

  如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除

  然后,从远程删除。删除命令也是push,但是格式如下:

远程上的v0.8版本没有了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN博客

《PaddlePaddle从入门到炼丹》十二——自定义文本数据集分类

GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note12

25430
来自专栏ThinkSNS

【研发日记13】不使用三方包时,如何在ThinkSNS中建立优雅的用户权限管理

ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+...

11340
来自专栏hadoop学习笔记

如何编译运行HanLP自然语言处理包

git clone https://github.com/hankcs/HanLP.git

10330
来自专栏编程微刊

微信小程序wepy框架入门教程-底部导航栏效果(五)

wepy是腾讯自己开发的框架,作用主要是提高开发者的开发效率,采用了类似使用了vue的代码书写风格,开发者可以熟练的上手小程序开发。

35930
来自专栏编程坑太多

『互联网架构』软件架构-spring源码之spring结构概述(八)

spring-core和spring-beans模块是[Spring框架的基础],包括控制反转和依赖注入等功能。BeanFactory是工厂模式的微妙实现,它移...

13830
来自专栏CreateAMind

SQN(看最后的视频里 砖块被打光了)及代码及saved_models

再看LunarLander-v2的效果(也是比较简单了。。。),AverageEpRet就是不上300... : (

13830
来自专栏角落的白板报

2019年起该如何开始学习 ABP 框架系列文章-开篇有益

本文的目的是为了让刚刚接触 ABP 框架的同学或者准备接触 ABP 框架的同学,能够理解和搞明白 ABP 框架到底是怎么回事,毕竟它发展了好几年的时间。社区中有...

11420
来自专栏CSDN博客

《PaddlePaddle从入门到炼丹》十三——自定义图像数生成

GitHub地址:https://github.com/yeyupiaoling/LearnPaddle2/tree/master/note13

19430
来自专栏机器之心

情人节:一本正经地为单身狗推荐这个158万张图像的鉴黄数据集

项目地址:https://github.com/EBazarov/nsfw_data_source_urls

12110
来自专栏Zchannel

GitHub被指审查内容 著名“换脸”开源项目deepfake遭限制访问

昨天 Hacker News 上一条关于 deepfake 开源项目的帖子引发了众多开发者的激烈讨论,事出为何?我们不妨看看。按照帖子的提示,笔者尝试在隐身模式...

19930

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励