Git分布式管理-头歌实验分支管理

一、创建本地分支-git branch

任务描述

当你进入一个团队,在获得产品的完整代码之后,你首先要做的就是,在本地创建一个属于自己的分支,然后才能在自己的分支上进行开发。

本关任务:在本地仓库创建一个新的分支,并切换到该新分支,然后添加指定文件到本地仓库。

相关知识

当初始化一个版本库并进行第一次提交的时候,如果没有创建指定分支,并切换到该分支,commit操作默认会在本地创建master分支,并将内容提交到master分支。一般我们会在版本库中维护一个master分支,如下图所示:

我们在master分支上,进行了C1C2C3三次提交,且当前指针指向C3提交。

一般情况下,我们只会将已经成熟的代码存放到master分支,而将正在开发的代码或者测试版的代码放到其他分支。这时,我们就需要新建分支,以在该分支进行开发。如下图:

当我们在主分支进行了C2提交后,新建了develop分支,并在其上进行了两次提交。此时,工作区指针HEAD指向develop分支。 创建本地分支用到的命令是git branch,而分支切换用到的命令是git checkoutgit checkout是有很多用途的命令,在这里我们只讲它在分支操作中的使用。下面我们详细介绍这两个命令的使用。

  • 分支切换 可以使用git checkout 命令切换到其他分支。如你本地有master分支和develop分支,目前你正处于develop分支进行开发,现在你想切换到master去,则可以执行下面的操作: git checkout master 这样就能切换到master分支继续进行开发。
  • 创建新的分支 当你需要创建一个新的分支的时候,可以使用git branch命令,其具体使用格式为: git branch 新的分支名字 使用示例如下:
    #创建名为new_branch的新分支
    git branch new_branch
  • 创建新分支的同时切换 切换到一个新的分支,有一个更为简洁的命令:git checkout -b,它的使用格式为: git checkout -b 新的分支 名字 其具体使用方法如下: git checkout -b new_branch 这样就可以创建,并切换到了new_branch分支。
#创建gitTraining文件夹
mkdir gitTraining#进入gitTraining文件夹
cd gitTraining#将gitTraining初始化为一个本地仓库
git init#请在下面的Bein/End星号线内,使用简洁的命令,新建gitTraining分支并切换到该分支
#********** Begin **********#
git checkout -b gitTraining#********** End **********##创建helloGit.txt文件
touch helloGit.txt#添加到暂存区
git add helloGit.txt#提交到本地仓库
git commit -m "添加helloGit.txt"

 二、删除本地分支 git branch -D

任务描述

在开发过程中,很可能出现的一个情况是:你为了解决一个紧急bug,而临时创建了一个分支或者分支过于混乱需要丢弃。这时你就需要进行分支删除操作。

本关任务:删除本地分支。

相关知识

现在我们来看一个实际的例子。请看下图:

首先,我们在master工作到 C1,然后开始一个新分支develop分支,做为测试版的代码分支。提交到C5的时候,又需要临时解决一个问题,于是从C5的地方又分出一个分支issue。提交到C7的时候,该issue被解决。issue分支已经失去其意义,则需要将其删除,以保持本地版本库分支树的干净。我们将issue分支上的代码,合并到develop上之后,就可将issue分支删除。删除issue分支后的分支树如下:

其中,C8为合并issue分支所进行的提交。

删除本地分支,需要用到git branch命令,且需要-D参数,具体命令格式为:   

git branch -D 需要删除的分支的名字

具体使用示例如下:

#删除develop分支
git branch -D develop

示例中的命令,能够将本地分支develop删除。

编程要求

本关的编程任务是,补全右侧代码片段中BeginEnd中间的脚本,进入gitTraining本地仓库,删除git分支。平台已经为你准备了gitTraining本地仓库,其中有两个分支:mastergit,且版本库当前处于master分支。

#进入本地仓库目录
cd gitTraining#请在下方Begin至End星号线内填写git命令以删除git分支
#********** Begin **********#git branch -D git#********** End **********#

 三、删除远程分支

任务描述

在开发过程中,有时可能由于产品变更,或者版本变更,而需要丢弃远程版本库中某个分支的内容。这个时候,你就需要一系列操作,来确保安全有效地删除远程分支。

本关任务:删除远程版本库中的某个分支。

相关知识

删除分支用到的git命令是git push,在具体的使用过程中有不同的用法。

  • 通过推送空分支到远程分支,实现删除。 一个删除远程分支的方法是,推送一个空分支到远程指定分支,以实现删除。推送本地分支到远程分支的方法是: git push 远程主机名 本地分支:远程分支
    • 与之类似,推送空分支实现删除的方法是:   git push 远程主机名 :远程分支前没有指定本地分支名。具体的使用示例如下:
      #删除远程develop分支,其中origin为远程仓库名
      git push origin :develop
  • 通过delete参数删除远程分支: 除了推送空分支到远程分支外,也可以通过delete参数实现删除。具体的命令格式为:   git push 远程主机名 --delete 远程分支名 具体使用示例如下:
    #删除远程develop分支,其中origin为远程主机名
    git push origin --delete develop
    编程要求

    本关的编程任务是,补全右侧代码片段中BeginEnd中间的脚本,删除远程git分支。平台已经准备了一个本地版本库gitTraining,且已将/tmp/educoder.git添加为远程仓库,并将其命名为origin,本地和远程均已创建gitmaster分支。

#进入gitTraining
cd gitTraining#请在下方Begin至End星号线内填写git命令以删除远程git分支
#********** Begin **********#
git push origin --delete git#********** End **********#
#进入gitTraining
cd gitTraining#请在下方Begin至End星号线内填写git命令以删除远程git分支
#********** Begin **********#
git push origin  :git#********** End **********#

 四、本地分支合并  git merge

任务描述

在协作开发中,团队中每个人可能都只负责一个模块。所以,很有可能,你在开发过程中,需要用到别人所开发的功能。这个时候就需要将别人分支的内容,合并到你自己的分支;或者,develop分支或者master分支有更新,你也需要将它们的修改,合并到你的分支,以跟上产品开发进程;也有可能你为了解决一个bug,创建临时分支,完成开发后,需要将其合并到你的分支。这些都需要分支合并的知识。

本关任务:合并本地分支的内容。

分支合并需要用到git merge命令,具体的命令格式为:

git merge 需要合并的分支

在具体使用中,如当前处于master分支,需要将develop分支合并到master分支,则具体的使用方式如下:

git merge develop

同时,分支合并也分为正常合并和快进式合并,通过为git merge添加参数,即可实现不同操作。

  • 快进式合并 默认情况下,Git执行"快进式合并",即fast-farward merge,会直接将被合并的分支指向需要合并的分支。如下图:

     

当需要将右侧分支(develop)合并到左侧分支(master)时,master分支会生成一个指针,直接指向develop。快进式合并为默认合并方式,不需要添加任何其他参数,使用git merge 需要合并的分支即可完成。

  • 当需要将右侧分支(develop)合并到左侧分支(master)时,master分支会生成一个指针,直接指向develop。快进式合并为默认合并方式,不需要添加任何其他参数,使用git merge 需要合并的分支即可完成。

如图所示,Master分支上产生了一次新的提交,也就是说生成一个新节点完成了合并,这样的话,版本演进更清晰。

下面我们以一个具体的例子,来演示一下这两种合并方式的区别:

  1. 创建master分支,并在其上提交hello文件;
  2. master分支切换到新分支develop,并进行两次提交,分别将hello1hello2两个文件提交到develop分支;
  3. 切换回master分支,执行git merge develop进行快进式合并,然后查看master分支的日志,得到如下提示信息:如上图可知,master分支多了develop分支上的两次提交信息。
  4. master分支回退到合并前状态,再次执行git merge --no-ff develop,进行非快进式合并,然后再次查看日志:
  5. 可见,master分支发生了分叉,且master多了一次提交。

    通过以上分析,两种合并方式的区别就很明显了。

编程要求

本关的编程任务是,补全右侧代码片段中BeginEnd中间的代码,将git分支以快进式方式合并到master分支。平台已准备了gitTraining版本库,并在本地创建了mastergit分支,且当前处于master分支。

#进入gitTraining目录
cd gitTraining#请在下方Begin至End星号线内填写git命令以合并git分支内容到master分支
#********** Begin **********#
git merge git#********** End **********#

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/513771.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flutter小程序开发,Android高级工程师必备知识

AWTK 主要特色: 1、跨平台 AWTK 是跨平台的,这有两个方面的意思: AWTK 本身是跨平台的。目前支持的平台有 ZLG AWorks、Windows、Linux、MacOS、嵌入式 Linux、Android、Web 和嵌入式裸系统,可以轻松的移植到各种 RTOS 上。AWT…

javascript基础入门

1.第一个javascript程序 javascript程序不能够独立的运行,必须依赖于HTML文件,type属性值用来说明脚本的类型,这里 是指使用javascript编写的文本文件; 2.alert警告框 alert()函数显示一条指定的信息&am…

Windows上websocket客户端连接定时存储消息到文件并加载文件定时发送服务端工具实现

场景 在业务开发中,需要对接三方websocket协议数据或者连接并存储线上websocket协议数据,需要使用websocket客户端 连接线上的websocket服务端获取并存储数据,然后将数据存储成文件格式可移植,并将数据复制 到本地,…

【探索AI】二十五 深度学习之第8周:深度学习项目实战

项目名称:基于深度学习的图像分类系统 一、项目背景 随着大数据和人工智能技术的快速发展,图像分类技术在各个领域得到了广泛应用,如安防监控、医疗诊断、自动驾驶等。本项目旨在利用深度学习技术构建一个高效的图像分类系统,实…

Nginx使用—http基础知识

web访问流程 当我们在客户端通过浏览器输入网址的时候,这时候是访问不到服务器的, 先会去找到DNS解析服务器,DNS解析服务器返回IP地址, 客户端通过http协议向服务端发送请求,服务器响应请求并返回对应的资源给客户端&a…

持续更新 | 与您分享 Flutter 2024 年路线图

作者 / Michael Thomsen Flutter 是一个拥有繁荣社区的开源项目,我们致力于确保我们的计划公开透明,并将毫无隐瞒地分享从问题到设计规范的所有内容。我们了解到许多开发者对 Flutter 的功能路线图很感兴趣。我们往往会在一年中不断更改并调整这些计划&a…

CSS实现选中卡片样式操作

图一默认自动选中&#xff0c;并且不可取消选中&#xff0c;当选择其他卡片才可点击下一步 在 “ src/assets ” 路径下存放 save.png&#xff0c;代表选中的状态 <div class"cards"><ul class"container"><li v-for"image in image…

金融科技创新丨MogDB 数据库助四川天府银行信息化改造迈上新台阶

作为四川省重要的城市商业银行之一&#xff0c;四川天府银行自2001年12月成立以来&#xff0c;在中国银行业树立了多项标杆&#xff0c;逐步发展成为具有国际金融背景、跨区域、独具特色的现代精品银行。在信息系统升级改造的道路上&#xff0c;四川天府银行一直秉承着稳中求进…

sentinel docker 基础配置学习

1&#xff1a;去官网下载 Releases alibaba/Sentinel GitHub 2&#xff1a;保存到linux 3&#xff1a;编写dockerfile FROM openjdk:8-jreLABEL authors"xxx" #第二步创建一个文件夹Z RUN mkdir /app #第三步复制jar 到app 下 COPY xxxxxx-1.8.7.jar /app/#第四…

【Web】浅浅地聊JDBC java.sql.Driver的SPI后门

目录 SPI定义 SPI核心方法和类 最简单的SPIdemo演示 回顾JCBC基本流程 为什么JDBC要有SPI JDBC java.sql.Driver后门利用与验证 SPI定义 SPI&#xff1a; Service Provider Interface 官方定义&#xff1a; 直译过来是服务提供者接口&#xff0c;学名为服务发现机制 它通…

机器学习流程—数据预处理下篇

机器学习流程—数据预处理下篇 我们在机器学习项目开发过程中遇到的大多数现实数据集都具有混合数据类型的列。这些数据集由分类列和数字列组成。然而&#xff0c;各种机器学习模型不适用于分类数据&#xff0c;为了使这些数据适合机器学习模型&#xff0c;需要将其转换为数值…

Python 多线程编程实战:threading 模块的最佳实践

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站AI学习网站。 目录 前言 线程的创建 1. 继承 threading.Thread 类 2. 使用 threading.Thread 对象 线程的同步 使用锁 线程的通信…