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

文章目录

  • 前言
  • 一.远程仓库的概念
  • 二.远程仓库的操作
    • 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.mfbz.cn/a/332956.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20240118-最小下降路径总和

昨天的爬楼梯以前写过&#xff0c;是一道基础的动态规划&#xff0c;就不重新写了。 题目要求 给定一个n*n的矩阵数组&#xff0c;返回通过矩阵的任何下降路径的最小和。 下降路径从第一行中的任何元素开始&#xff0c;并选择下一行中正下方或左右对角线的元素。具体来说&am…

【Flink-1.17-教程】-【三】Flink 运行架构、Flink 核心概念【并行度、算子链、任务槽】、Flink 作业提交流程

【Flink-1.17-教程】-【三】Flink 运行架构、Flink 核心概念【并行度、算子链、任务槽】、Flink 作业提交流程 1&#xff09;系统架构1.1.系统成员组成1.2.作业提交流程 2&#xff09;核心概念2.1. 并行度&#xff08;Parallelism&#xff09;2.1.1.并行子任务和并行度2.1.2.并…

如何无公网ip使用Potplayer访问群晖NAS中储存的本地资源【内网穿透】

文章目录 本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是&#xff1a;1 使用环境要求&#xff1a;2 配置webdav3 测试局域网使用potplayer访问webdav3 内网穿透&#xff0c;映射至公网4 使用固定地址在potplayer访问webdav ​ 国内流媒体平台的内…

2023 年顶级前端工具

谁不喜欢一个好的前端工具&#xff1f;在本综述中&#xff0c;您将找到去年流行的有用的前端工具&#xff0c;它们将帮助您加快开发工作流程。让我们深入了解一下&#xff01; 在过去的 12 个月里&#xff0c;我在我的时事通讯 Web Tools Weekly 中分享了数百种工具。我为前端…

Flink TaskManager内存管理机制介绍与调优总结

内存模型 因为 TaskManager 是负责执行用户代码的角色&#xff0c;一般配置 TaskManager 内存的情况会比较多&#xff0c;所以本文当作重点讲解。根据实际需求为 TaskManager 配置内存将有助于减少 Flink 的资源占用&#xff0c;增强作业运行的稳定性。 TaskManager 内…

Android Dialog setCanceledOnTouchOutside失效,点击dialog外面不消失

前言&#xff1a;有一个需求需要点击dialog外面要消失&#xff0c;本来以为很简单结果设置了一直未生效 setCanceledOnTouchOutside(true); 问了半天chat-gpt4结果给的答案都不明显 查看代码发现设置了style&#xff0c;于是尝试去除这个style&#xff0c;结果点击setCancele…

如何进行高效过滤器检漏:法规标准对比及检漏步骤指南

高效检漏光度计扫描法作为一种关键的高效过滤器检漏手段&#xff0c;在国内受到广泛应用。为确保其有效性和合规性&#xff0c;国内相关法规和标准对其进行了详细规定。本文将对比相关法规&#xff0c;并特别关注检漏过程中的详细步骤。 关于中邦兴业 北京中邦兴业科技有限公司…

买家福音:亚马逊鲲鹏系统全自动操作助你轻松搞定一切

我一直以来都是亚马逊的忠实用户&#xff0c;但是最近我发现了一款真正令人惊叹的工具&#xff0c;改变了我在平台上的经验。我想分享一下我的感受&#xff0c;最近&#xff0c;我得知并尝试了亚马逊鲲鹏系统&#xff0c;简直是为买家账号管理量身定制的利器。在我账号过多时&a…

如何用GPT进行数据分析?

详情点击链接&#xff1a;如何用GPT进行数据分析&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2 二定制自…

C++初阶类与对象(三):详解复制构造函数和运算符重载

上次介绍了构造函数和析构函数&#xff1a;C初阶类与对象&#xff08;二&#xff09;&#xff1a;详解构造函数和析构函数 今天就来接着介绍新的内容&#xff1a; 文章目录 1.拷贝构造函数1.1引入和概念1.2特性 2.赋值运算符重载2.1运算符重载2.2放在哪里2.3运算符重载示例2.3.…

Java JVM 堆、栈、方法区详解

目录 1. 栈 2. 堆 3. 方法区 4. 本地方法栈 5. 程序计数器 首先来看一下JVM运行时数据区有哪些。 1. 栈 在介绍JVM栈之前&#xff0c;先了解一下 栈帧 概念。 栈帧&#xff1a;一个栈帧随着一个方法的调用开始而创建&#xff0c;这个方法调用完成而销毁。栈帧内存放者方…

JavaScript 学习笔记(WEB APIs Day1)

「写在前面」 本文为 b 站黑马程序员 pink 老师 JavaScript 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. JavaScript 学习笔记&#xff08;Day1&#xff09; 2. JavaSc…

[CISCN 2019华北Day2]Web1

[CISCN 2019华北Day2]Web1 wp 很遗憾的是&#xff0c;我在做这题时没有什么头绪。用 sqlmap 开最高等级也只扫出来库名&#xff0c;表名和列名扫不出来&#xff0c;就算直接指定表名和列名&#xff0c;还是扫不出来&#xff0c;sqlmap 测出来的方法是时间盲注。 推荐博客&…

游泳耳机有什么好处?四款适合水下听歌的优质游泳耳机分享

游泳是一项健康有益的运动&#xff0c;而搭配一副高质量的游泳耳机&#xff0c;更能在游泳过程中享受音乐的陪伴。本文将介绍游泳耳机的好处&#xff0c;并为大家推荐四款适合水下听歌的游泳耳机&#xff0c;让大家在游泳中拥有更加丰富的体验。 接下来跟我一起看看游泳耳机的好…

allegro画PCB如何将版图底板改大

Step->Designer Parameter Editor width和hight是你设置的版图高和宽&#xff0c;X和Y是你版图上负坐标的最大值。

PowerScale重磅升级,加速迈进AI时代

2024开年 给大伙报告一则好消息 Dell非结构化数据存储的扛把子 PowerScale迎来重大升级 第二代PowerScale全闪存系统 即将闪亮登场 此次升级主要涉及硬件、软件及与NVIDIA的合作关系三个方面&#xff0c;升级后的PowerScale有望成为第一个通过 NVIDIA DGX SuperPOD验证的以…

【电商API接口】电商卖家必看!电商数据源对接全攻略!收藏!

电商竞争白热化的今天&#xff0c;一个电商卖家往往会在多个平台铺设店铺来获取更多的客户。 不同的平台有不同的管理系统&#xff0c;因此&#xff0c;卖家们在做分析时需要从多个系统导出数据&#xff0c;比如各类电商平台&#xff08;淘宝、京东......&#xff09;、各类ER…

Linux安装ossutil工具且在Jenkins中执行shell脚本下载文件

测试中遇到想通过Jenkins下载OSS桶上的文件&#xff0c;要先在linux上安装ossutil工具&#xff0c;记录安装过程如下&#xff1a; 一、下载安装ossutil&#xff0c;使用命令 1.下载&#xff1a;wget https://gosspublic.alicdn.com/ossutil/1.7.13/ossutil64 2.一定要赋权限…

大数据开发之Hadoop(优化新特征)

第 1 章&#xff1a;HDFS-故障排除 注意&#xff1a;采用三台服务器即可&#xff0c;恢复到Yarn开始的服务器快照。 1.1 集群安全模块 1、安全模式&#xff1a;文件系统只接收读数据请求&#xff0c;而不接收删除、修改等变更请求 2、进入安全模式场景 1&#xff09;NameNod…

kali下-MSF-ftp_login模块破解FTP账号及密码

一、环境准备 两台设备在同一个网络内 一台kali系统&#xff1a;192.168.10.128 一台winserver2016&#xff1a;192.168.10.132 二、MSF介绍 metasploit 全称是The Metasploit Framework&#xff0c;又称MSF&#xff0c;是Kali 内置的一款渗透测试框架&#xff0c;也是全球…
最新文章