带你解析Git的基础功能(三)

news2024/11/17 11:56:01

文章目录

  • 前言
  • 一.远程仓库的概念
  • 二.远程仓库的操作
    • 2.1新建远程仓库
    • 2.2 克隆远程仓库
    • 2.3 向远程仓库推送
    • 2.4 拉取远程仓库
    • 2.5 忽略特殊⽂件
    • 2.6 标签管理
  • 三.Git实战场景
    • 3.1 Git多人实战场景一
      • 准备工作
      • 由开发者1和开发者2新增加文件内容。
      • 将dev的文件合并到master上
      • 总结
    • 3.2 Git多人实战场景二
    • 3.3Git 实战场景三
  • 四.总结

前言

目标: 掌握 Git 远程仓库与本地仓库,结合版本管理与分⽀管理,做到基于分⽀级的个人级开发

一.远程仓库的概念

我们现来看看Git对远程仓库的解释
在这里插入图片描述

我简单的总结一句:远程仓库是指托管在因特网或其他网络中的 Git 仓库。

二.远程仓库的操作

2.1新建远程仓库

进如gitte网站,点击右上角加号,新建仓库。
在这里插入图片描述
之后就会出现这个界面,大家输入相应的仓库名称和路径,就可以点击创建操作了
在这里插入图片描述
创建成功如下:
在这里插入图片描述
创建成功后,我们可以对远程仓库进⾏⼀个基本的设置:开源or私有
在这里插入图片描述

2.2 克隆远程仓库

克隆/下载远端仓库到本地,需要使⽤ git clone 命令,后面跟上我们的远端仓库的链接,远端仓库的链接可以从仓库中找到:选择“克隆/下载”获取远程仓库链接:
在这里插入图片描述

SSH 协议和 HTTPS 协议是 Git 最常使⽤的两种数据传输协议。SSH 协议使⽤了公钥加密和公钥登陆机制,体现了其实⽤性和安全性,使⽤此协议需要将我们的公钥放上服务器,由 Git 服务器进⾏管理。使⽤ HTTPS ⽅式时,没有要求,可以直接克隆下来。我下面介绍这两种方式:
在克隆操作执行之前,我们要配置仓库的username和email
在这里插入图片描述

HTTPS方式:
在这里插入图片描述

SSH方式

使⽤ SSH ⽅式克隆仓库,需要我们多设置一步,必须添加公钥到远端库中,然后我们才才能进行克隆:
**第⼀步:**创建SSH Key。在⽤⼾主⽬录下,看看有没有.ssh⽬录,如果有,再看看这个⽬录下有没有
id_rsa 和 id_rsa.pub 这两个⽂件,如果已经有了,可直接跳到下⼀步。如果没有,需要创建SSH Key:
使用这个命令,建立公钥

 ssh-keygen -t rsa -C "@qq.com" 邮箱使用自己的邮箱

在这里插入图片描述

**第⼆步:**添加⾃⼰的公钥到远端仓库。
我们先查看公钥,复制到中央仓库的公钥中
在这里插入图片描述
进入设置
在这里插入图片描述
点击SSH公钥设置
在这里插入图片描述
点击 ssh公钥 选项,进⾏设置:
在这里插入图片描述
点击确认后,我们的克隆工作都完成了,现在可以开始克隆了。
在这里插入图片描述
这样我们就克隆成功了,如果有多个⼈协作开发,GitHub/Gitee 允许添加多个公钥,只要把每个⼈的电脑上的Key 都添加到 GitHub/Gitee,就可以在每台电脑上往 GitHub/Gitee 上提交推送了。

2.3 向远程仓库推送

这时候我们就可以看一下如何推送到远程仓库中
我们一般推送到远程仓库的命令如下:

git push <远程主机名> <本地分⽀名>:<远程分⽀名>

如果本地分⽀名与远程分⽀名相同,则可以省略冒号:

git push <远程主机名> <本地分支名>

我们现在本地修改文件并且提交。
在这里插入图片描述
开始推送操作。
开始推送操作的同时,我们现来介绍一下怎么查看远程仓库地址
在这里插入图片描述
开始推送操作
在这里插入图片描述

这时候代码已经被推送到远端了
在这里插入图片描述

2.4 拉取远程仓库

我们现来看看如何拉取远程仓库的命令

git pull <远程主机名> <远程分⽀名>:<本地分⽀名>

如果远程分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。

 git pull <远程主机名> <远程分⽀名>

先修改远端仓库的文件的内容
在这里插入图片描述

然后在本地端拉取文件内容
在这里插入图片描述

2.5 忽略特殊⽂件

在⽇常开发中,我们有些⽂件不想或者不应该提交到远端,⽐如保存了数据库密码的配置⽂件,那怎么让 Git 知道呢?在 Git ⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件,然后把要忽略的⽂件名填进去,Git 就会⾃动忽略这些⽂件了。
这个操作,在我们创建仓库的时候就可以选择忽略哪些文件
在这里插入图片描述
如果当时没有选择这个选择,在⼯作区创建⼀个也是可以的。⽆论哪种⽅式,最终都可以得到⼀个完整的 .gitignore ⽂件,例如我们想忽略以 .so 和 .ini 结尾所有⽂件, .gitignore 的内容如下:
在这里插入图片描述
这里面.*的内容是需要忽略的东西
忽略可执行文件:
*.swf:Flash 文件。
*.air:AIR 文件。
*.ipa:iOS 应用程序包。
*.apk:Android 应用程序包
我们之后就创建这个文件,把约束条件加入进去
在这里插入图片描述
接着我们就来验证⼀下.gitignore⽂件的能力,在⼯作区新增两个⽂件 a.air b.air

在这里插入图片描述
显然我们的配置生效了,这两个文件并没有加入工作区。

2.6 标签管理

标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。例如,在项⽬发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样的标签来标识⾥程碑的意义。
这有什么⽤呢?相较于难以记住的 commit id , tag 很好的解决这个问题,因为 tag ⼀定要给⼀个让⼈容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使⽤标签就能很快定位到。
gitte上面的标签就是这个。
在这里插入图片描述
我们开始创建标签
敲命令 git tag [name] 就可以打⼀个新标签
在这里插入图片描述
创建了标签,怎么指定标签呢?
1.查看提交历史
2.根据历史版本,对不同的历史版本打上标签
使用命令

git log  --pretty=oneline  --abbrev-commit

在这里插入图片描述
我们指定了标签之后,我们可以操作标签了
1.查看标签信息

git show [标签号]

在这里插入图片描述

2.推送标签

git push origin v0.9

在这里插入图片描述

在这里插入图片描述
3.删除标签
删除标签的命令是
git tag -d v0.9
在这里插入图片描述
删除之后我们还要提交

git push origin --tags 如果有多个标签,这里可以一键提交

三.Git实战场景

我们前面学习了git的基础管理和分支管理,现在又逐步学习了git的远程仓库操作。接下来我们就要模拟实际的场景场景,去整合我们前面学习过的知识。

3.1 Git多人实战场景一

开发者 1 和开发者 2 都从中央仓库克隆了一份代码,并创建了一个 dev 分支。开发者 1 在 dev 分支上开发了一些新功能,并推送到远程仓库。开发者 2 也在 dev 分支上开发了一些新功能,并推送到远程仓库。

场景:我们在master分支下 file.txt文件新增代码 “aaa”、“bbb”.
实现:由开发者1新增"aaa",由开发者2新增"bbb"
条件:在一个分支下协作完成。
这里的在一个分支上协作完成的意思是指多个开发者在同一个分支上进行开发,然后将修改合并到主分支。

如果还没理解我们这个场景,我来画个图大家理解一些就是了
在这里插入图片描述
知道大概的操作,需要干什么事情之后,我们就开始着手上手做
具体的步骤如下:
1.在服务器和本地电脑上克隆中央仓库。
2.在远程仓库创建 dev 分支,并在本地克隆。
3.开发者 1 在 dev 分支上开发,并推送到远程仓库。
4.开发者 2 在 dev 分支上开发,并推送到远程仓库。
5.开发者 1 将 dev 分支的修改合并到 master 分支。
6.开发者 1 将 master 分支的修改推送到远程仓库。
7.删除中央仓库的 dev 分支。

准备工作

1. 在服务器克隆中央仓库和在本地电脑上克隆中央仓库
服务器
在这里插入图片描述
本地
按住shift打开powershell窗口,开始克隆操作
在这里插入图片描述
本地已经克隆成功了。
在这里插入图片描述

2. 我们在远程仓库创建一个dev分支,然后我们其他开发这空间要拉取操作。

点击maste然后点击管理这个词条,新建分支即可
在这里插入图片描述

在这里插入图片描述
在两台计算机上做拉取分支操作。
查看分支的命令有两个
git branch -r 命令用于列出远程仓库中的所有分支。
gitbranch -a 命令用于列出本地仓库中的所有分支,包括远程分支
服务器
在这里插入图片描述
本地计算机
在这里插入图片描述
最后完成以后,状态图如下:
在这里插入图片描述

由开发者1和开发者2新增加文件内容。

开发者1:
做的工作就是
创建一个dev分支和远程仓库的dev分支相关联,然后对file1,进行操作,并推送到远程仓库中。
在这里插入图片描述
远程仓库的分支:
在这里插入图片描述

开发者2:

修改文件
在这里插入图片描述

提交文件到版本库和暂存区
在这里插入图片描述
最后推送到远程仓库
在这里插入图片描述
这里为什么会出现问题了,是因为我们开发者1之前已经对中央仓库进行了修改,这时候开发者2再次提交,中央仓库并没有这么智能,识别是增加追加文件还是覆盖文件,这一切需要你手动去更改。接下来我们就开始做吧。
1.先拉取远程仓库的操作
在这里插入图片描述
2.更改默认冲突
在这里插入图片描述
3.修改保存后提交并推送到中央仓库。
在这里插入图片描述
4.查看中央仓库的内容
在这里插入图片描述

现在的状态图如下:
在这里插入图片描述

将dev的文件合并到master上

其实git合并分支有两种方式,一种是PR申请单操作,另外一种是本地合并操作

PR申请单操作

PR 申请单(Pull Request)是一种在多人协作开发中,将本地分支的修改合并到主分支的常用方式。
在这里插入图片描述

具体在gitte上的操作界面如下
在这里插入图片描述
这里我们针对申请单的合并操作不做过多赘述,我们还是针对本地合并操作多做出一些解释
本地合并操作
本地修改的合并操作
具体步骤如下:
1.切换到主分支。
2.使用 git merge 命令将本地分支的修改合并到主分支。
具体示意图如下:
在这里插入图片描述
开发者1
1.先保证dev下的文件是最新的。
在这里插入图片描述
2.切换到master节点,保证master仓库是新的
在这里插入图片描述
3.切换回dev对master进行合并操作
在这里插入图片描述
4.切换master对dev进行合并操作,并推送到中央仓库。(这里的合并是为了避免冲突)
在这里插入图片描述
查看中央仓库
在这里插入图片描述

最后删除中央仓库的dev分支。

总结

在同一分支下进行多人协作的工作模式通常是这样:

  • 首先,可以试图用 git push origin branch-name 推送自己的修改;
  • 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 试图合并;
  • 如果合并有冲突,则解决冲突,并在本地提交;
  • 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
  • 功能开发完毕,将分支 merge 进 master,最后删除分支。

3.2 Git多人实战场景二

目标:远程master分支下新增function和function2文件
实现:由开发者1新增function1,由开发者2新增function2
条件:在不同分支下协作完成(意思是各自让某一个功能私有某一个分支)
现在我们可以开始操作了
针对开发者1的操作
在这里插入图片描述
针对开发者2的操作

在这里插入图片描述
最后看效果
在这里插入图片描述
此时,在本地,你看不见他新建的文档,他看不见你新建的文档。并且推送各自的分支时,并没有任何冲突,你俩互不影响,用起来很舒服!!
状态变化图如下:
在这里插入图片描述

3.3Git 实战场景三

但天有不测风云,你的小伙伴突然生病了,但需求还没开发完,需要你帮他继续开发,于是他便把feature-2分支名告诉你了。这时你就需要在自己的机器上切换到 feature-2 分支帮忙继续开发,要做的操作如下:
首先分支2已经挂掉了,我们要在分支1的下面继续做分支2的工作。
1.首先拉取远程仓库
2.与远程仓库建立联系
3.修改文件并且推送

在这里插入图片描述
查看远程仓库
在这里插入图片描述
这时,你的⼩伙伴已经修养的差不多,可以继续进⾏⾃⼰的开发⼯作,那么他⾸先要获取到你帮他开发的内容,然后接着你的代码继续开发。或者你已经帮他开发完了,那他也需要在⾃⼰的电脑上看看。具体的操作如下:
在这里插入图片描述

最后各⾃功能开发完毕后,不要忘记我们需要将代码合并到master中才算真正意义上的开发完毕。
我这里会用到我们申请单的方式进行合并
1.先新建申请单
在这里插入图片描述
2.填写申请单提交
在这里插入图片描述

3.审查人员审查
在这里插入图片描述
最后完成合并
在这里插入图片描述

开发者2的合并操作完成了,轮到开发者1了。
开发者1在本地上操作。
1.首先在本地master节点拉取远程仓库master
2.在本地feature-1节点合并本地节点master
3.合并完成后推送到远程仓库节点的feature-1节点。
4.最后在远程仓库用申请单的方式合并即可
5.合并完成之后,删除两个节点

在这里插入图片描述
填写申请单
在这里插入图片描述

审核申请单
在这里插入图片描述
合并分支
在这里插入图片描述
查看合并结果
在这里插入图片描述
这个场景的状态变化图如下:
在这里插入图片描述
另外我们还要解决一个问题,远程分支删除后,本地 git branch -a 依然能看到远程分支的解决办法。
使用git remote show origin 查看远程分支的关联
在这里插入图片描述
使用 git remote prune origin
在这里插入图片描述

四.总结

Git的操作到这里就告一段落了。基本的Git操作的介绍都介绍的差不多了,接下来就需要我们自己去探索知识的海洋了,愿各位大佬逐一指点我的错误,与可爱的你们一起进步!!!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TypeScript实现一个贪吃蛇小游戏

游戏效果 文件目录 准备1&#xff1a;新建index.html&#xff0c;编写游戏静态页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-…

微店商品详情API(micro.item_get)的数据分析和挖掘

随着电商行业的迅猛发展&#xff0c;微店作为电商平台的重要组成部分&#xff0c;提供了丰富的API接口供开发者使用。其中&#xff0c;微店商品详情API&#xff08;micro.item_get&#xff09;是用于获取商品详情的接口&#xff0c;为数据分析和挖掘提供了大量有价值的数据源。…

域环境权限提升

Windows系统配置错误 在Windows系统中&#xff0c;攻击者通常会通过系统内核溢出漏来提权&#xff0c;但是如果碰到无法通过系统内核溢出漏洞法国提取所在服务器权限的情况&#xff0c;就会系统中的配置错误来提权。Windows系统中常见哦欸之错误包括管理员凭证配置错误&#x…

人才测评,招聘软件研发经理的胜任素质模型与任职资格

招聘软件研发经理的胜任素质模型和任职资格是确保能够招聘到胜任的人才的重要组成部分。以下是详细的说明&#xff1a; 一、胜任素质模型 1.技术能力 软件研发经理需要具备深厚的技术能力&#xff0c;对软件开发的各个方面有深入的理解和掌握。他们需要掌握多种编程语言和…

c# 视频播放之Vlc.DotNet.Forms

先说下优缺点 优点&#xff1a;与电脑无关&#xff0c;能播放主流编码格式视频。 缺点&#xff1a;只能播放本地视频&#xff0c;网络视频播放不了。 下面是具体操作和代码 1. 安装Vlc.DotNet.Forms 和 VideoLAN.LibVLC.Windows Vlc.DotNet.Forms 是播放库&#xff0c;Vid…

算法 动态分析 及Java例题讲解

动态规划 动态规划&#xff08;英语&#xff1a;Dynamic programming&#xff0c;简称 DP&#xff09;&#xff0c;是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的&#xff0c;通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适…

Ant Design Vue上传多个图片

模板代码&#xff1a; 定义变量&#xff1a; 文件限制的函数&#xff1a; 上传的函数&#xff1a; 样式函数&#xff1a; 完整代码&#xff1a; <template><div class"dialog-upload" v-if"showUploadDialog"><div class"dialog-uplo…

2018年认证杯SPSSPRO杯数学建模A题(第二阶段)海豚与沙丁鱼全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 基于聚类分析的海豚捕食合作策略 A题 海豚与沙丁鱼 原题再现&#xff1a; 沙丁鱼以聚成大群的方式来对抗海豚的捕食。由于水下光线很暗&#xff0c;所以在距离较远时&#xff0c;海豚只能使用回声定位方法来判断鱼群的整体位置&#xff0c;难…

python|写一个简单的http服务器

本篇文章的python版本为: 什么是http http是一个应用层协议&#xff0c;准确的来说是基于TCP/IP4层网络协议中的传输层中的TCP应用层协议。 额&#xff0c;4层模型大概是这样的: 在网络通信中&#xff0c;用户的数据是以报文来传输的&#xff0c;但是在实际通信中&#xff0…

密码学学习笔记(二十四):TCP/IP协议栈

TCP/IP协议栈的基础结构包括应用层、传输层、网络层、数据链路层和物理层。 应用层 应用层位于TCP/IP协议栈的最顶层&#xff0c;是用户与网络通信的接口。这一层包括了各种高级应用协议&#xff0c;如HTTP&#xff08;用于网页浏览&#xff09;、FTP&#xff08;用于文件传输…

【安全篇 / FortiGuard】(7.4) ❀ 02. 独立VDOM下的FortiGuard服务升级 ❀ FortiGate 防火墙

【简介】由于业务的需要&#xff0c;创建两个独立VDOM&#xff0c;每个VDOM有各自的宽带&#xff0c;但是FortiGuard服务却无法升级&#xff0c;有什么办法解决吗&#xff1f; VDOM概念 首先我们看看什么是VDOM。 ① VDOM将你的FortiGate划分为多个逻辑设备&#xff0c;并将一个…

深入理解Linux文件系统

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;晴る—ヨルシカ 0:20━━━━━━️&#x1f49f;──────── 4:30 &#x1f504; ◀️ ⏸ ▶️ ☰ &…

力扣精选算法100题——长度最小的子数组(滑动窗口专题)

本题链接——长度最小的子数组 第一步&#xff1a;了解题意 给定一个数组&#xff0c;要求在这个数组中找到一个必须是连续的子数组并且这个子数组每个元素加起来>target并从找到的这些数组中取一个最短的数组。 第二步&#xff1a;算法原理 滑动窗口是一种在序列&#xff…

【开源】基于JAVA语言的河南软件客服系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统管理人员2.2 业务操作人员 三、系统展示四、核心代码4.1 查询客户4.2 新增客户跟进情况4.3 查询客户历史4.4 新增服务派单4.5 新增客户服务费 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的河…

中仕公考:贵州省统一面向社会公开招录公务员公告

2024年1月22日至1月25日期间,每日10:00、14:00及19:00对报名情况进行更新,供报考者参考。 资格初审时间为2024年1月22日9:00至1月28日17:00。 网上缴费时间为2024年1月22日9:00至1月29日17:00。 打印准考证时间2024年3月11日9:00至3月14日17:00。 公共科目笔试时间为: 202…

深度学习(2)--卷积神经网络(CNN)

卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;是一种深度学习模型或类似于人工神经网络的多层感知器&#xff0c;常用来分析视觉图像。 一.卷积神经网络基础概念 传统网络是二维的&#xff0c;而卷积网络是三维的。 例如32x32x3的图片&#xff0c;在传…

Pure-admin框架 Pure-table中获取所选中的内容的信息

最近在尝试使用Pure-admin框架来进行开发&#xff0c;正好遇到了多选表格需要获取选中项的id的情况&#xff0c;因为平台介绍说是二次封装 element-plus 的 Table &#xff0c;直接拿el-table的方法来试 在table上设置属性ref"multipleTableRef" let idArr [];mult…

为什么需要放行回源IP

为什么需要放行回源IP 网站以“独享模式”成功接入WAF后&#xff0c;所有网站访问请求将先经过独享引擎配置的ELB然后流转到独享引擎实例进行监控&#xff0c;经独享引擎实例过滤后再返回到源站服务器&#xff0c;流量经独享引擎实例返回源站的过程称为回源。在服务器看来&…

从“渲个锤子”,浅析影视动画渲染的困难与挑战!

提起“雷神之锤”&#xff0c;相信大家都不陌生。它是漫威电影宇宙中“雷神”托尔所使用的武器。传说中&#xff0c;这把圣器可以承载魔法咒语&#xff0c;召唤风、雨、雷、电四种自然元素。它能在使用者的意念下对目标进行攻击&#xff0c;无视与使用者之间的距离和障碍物&…

C++进阶(五)二叉搜索树

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、二叉搜索树概念二、二叉搜索树操作三、二叉搜索树的实现四、二叉搜索树的应用五、二叉搜索…