Git的原理和使用(三)

1. 分支管理

1.1 合并模式

1.1.1  fast forward模式

        git log --graph --abbrev-commit

 

1.1.2 no-ff模式

        合并出现问题后需要进行手动修改:

        如下图所示:

1.1.3 不使用no-ff模式

        git merge --no-ff -m "merge dev2" dev2

1.2 分⽀策略

        在实际开发中,我们应该按照⼏个基本原则进⾏分⽀管理: ⾸先,master分⽀应该是⾮常稳定的,也就是仅⽤来发布新版本,平时不能在上⾯⼲活; 

        ⼲活都在dev分⽀上,也就是说,dev分⽀是不稳定的,到某个时候,⽐如1.0版本发布 时,再把dev分⽀合并到master上,在master分⽀发布1.0版本; 你和你的⼩伙伴们每个⼈都在dev分⽀上⼲活,每个⼈都有⾃⼰的分⽀,时不时地往dev分⽀上合并就 可以了。 所以,团队合作的分⽀看起来就像这样:

 

1.3 bug 分⽀

        假如我们现在正在 dev2 分⽀上进⾏开发,开发到⼀半,突然发现 master 分⽀上⾯有 bug,需要 解决。

        在Git中,每个 bug 都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀ 删除。 可现在 dev2 的代码在⼯作区中开发了⼀半,还⽆法提交,怎么办? 

        情况:分支开发了代码还未提交,master出现了bug;

        我们切回到master分支,查看状态发现我们的工作区的文件没有保存;重新切回到dev2分支,将工作区的文件进行储存;

git stash

        如下所示,我们dev2分支的内容就存储到stash里面了;

        此时我们的工作区里面比较干净;但是我们的readme虽然没有进行add操作,但是已经被git所追踪管理;

        此时来修复bug:首先进入到master创建bug分支,其次在bug分支里面进行对readme文件进行修改,add和commit操作之后回到master分支进行合并;

        此时回到dev2分支继续进行开发,发现之前的内容被放到stash里面了,所以我们要进行会发到从前的状态,

        git stash list//查看stash里面有哪些内容

        git stash pop//将stash里面的内容恢复回来

        此时对dev2分支中的内容进行提交了;

        此时的分支如下:

        如果让dev2合并到master分支上,则可能会出现冲突,如下所示:

        我们进行如下操作:

第一步:

        在dev2分支上进行合并master,然后解决冲突之后,最后回到master,合并dev2分支,此时的合并就没有问题了;

第二步:

        

1.4 强制删除本地分支

        git branch -d//只有在进行merge之后,才能使用该指令;

        我们做如下修改: git branch -D 分支名

2.远程操作

2.1 理解分布式版本控制系统

        我们⽬前所说的所有内容(⼯作区,暂存区,版本库等等),都是在本地,也就是在你的笔记本或者 计算机上。⽽我们的 Git 其实是分布式版本控制系统!

         可以简单理解为,我们每个⼈的电脑上都是⼀个完整的版本库,这样你⼯作的时候,就不需要联⽹ 了,因为版本库就在你⾃⼰的电脑上。既然每个⼈电脑上都有⼀个完整的版本库,那多个⼈如何协作 呢?⽐⽅说你在⾃⼰电脑上改了⽂件A,你的同事也在他的电脑上改了⽂件A,这时,你们俩之间只需 把各⾃的修改推送给对⽅,就可以互相看到对⽅的修改了。

        分布式版本控制系统的安全性要⾼很多,因为每个⼈电脑⾥都有完整的版本库,某⼀个⼈的电脑坏掉 了不要紧,随便从其他⼈那⾥复制⼀个就可以了。

         在实际使⽤分布式版本控制系统的时候,其实很少在两⼈之间的电脑上推送版本库的修改,因为可能你们俩不在⼀个局域⽹内,两台电脑互相访问不了。也可能今天你的同事病了,他的电脑压根没有开 机。因此,分布式版本控制系统通常也有⼀台充当“中央服务器”的电脑,但这个服务器的作⽤仅仅 是⽤来⽅便“交换”⼤家的修改,没有它⼤家也⼀样⼲活,只是交换修改不⽅便⽽已。有了这个“中央服务器”的电脑,这样就不怕本地出现什么故障了(⽐如运⽓差,硬盘坏了,上⾯的所有东西全部 丢失,包括git的所有内容);

        中央服务器也叫做远程仓库;github就是远程仓库,国内有平替版本的gitee码云;

2.2 创建远程仓库

点击创建:

新建issue:

 

        当我们的仓库开源之后会有人发现我们代码的bug有问题,所以会通过issue给仓库的成员提出问题,如下:

关于pull requests:

        开发者在dev分支开发完成后,要向管理者提交(pr申请单),等申请通过之后才能进行合并;

2.3 克隆远程仓库

        1、使用https协议

        复制https连接,将远程仓库复制到本地文件中来:

        git remote

        git remote -v

        查看远端的详细信息;

        2、使用ssh协议:

点击设置:

        使⽤ SSH ⽅式克隆仓库,由于我们没有添加公钥到远端库中,服务器拒绝了我们的 clone 链接。需要 我们设置⼀下:

        第⼀步:创建SSH Key。在⽤⼾主⽬录下,看看有没有.ssh⽬录,如果有,再看看这个⽬录下有没有 id_rsa 和 id_rsa.pub 这两个⽂件,如果已经有了,可直接跳到下⼀步。如果没有,需要创建 SSH Key:

ssh-keygen -t rsa -C "1533722647@qq.com"

        现在有了那两文件,返回上一目录是cd ..

        此时拿到公钥之后就要配置到码云平台上了:

        复制公钥内容到:

         复制ssh协议:

2.4 推送

        一般来说,我们本地仓库是进行操作和修改文件的,我们要把文件推送(push)到远程中央仓库,详细俩说就是将本地仓库中的master分支(只要是分支都可以),推送到中央仓库的master(也可以是其他分支)分支上;push就是分支和分支的交互;

        在推送之前确保我们的配置是一样的;

        在克隆下来的远程仓库中进行文件创建,add和commit;

        使用push来完成交互;

        git push origin master:master(本地分支:远程分支);

        如果本地和远程的交互分支的名字都一样的,上面语句可以修改为如下所示:

        git push origin master

结果如下:

2.5 拉取远程仓库

         一般来说中央仓库里面的内容先进与本地仓库,本地就要将中央的文件拉取到本地进行操作;

        直接在gitee中进行修改:

        git pull origin master:master(中央仓库:本地仓库),同时如果两个分支一样的话可以进行简写;

pull操作:

        1、将中央仓库的分支文件拉到本地

        2、将地方的文件直接覆盖,即直接合并到本地的分支上;

2.6 配置git

        在⽇常开发中,我们有些⽂件不想或者不应该提交到远端,⽐如保存了数据库密码的配置⽂件,那怎 么让 Git 知道呢?在 Git ⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件,然后把要忽略的⽂件 名填进去,Git 就会⾃动忽略这些⽂件了。

        不需要从头写 .gitignore ⽂件,gitee 在创建仓库时就可以为我们⽣成,不过需要我们主动勾选⼀ 下,简单来说就是有的特殊文件不想让git来追踪管理,我们就把这些文件放入到gitingnore文件中:

        由于我们在初始化的时候没有勾选gitingnore文件,所以要在本地仓库来进行手动创建一个;

        如上所示所有.so文件都无法进行追踪管理;

        如果我们想让.so文件的有些文件强制被追踪管理;

        使用下面指令-f:git add -f b.so

        但是我们不建议使用该文件,我们应该在giyignore文件里面进行修改:

        在文件里面添加!c.so,即排除这个文件;

        查看d.so被忽略的指令在那里

         接下里把刚写好的文件推送到远端去:

 -----------------------------------------------------------------------------------------------------

设置全局配置项别名:

给git status起别名:

        git config --global alias.st status

        git st:

 

        git log --pretty=oneline --abbrev-commit打印提交的漂亮的日志

        设置为段指令:

        git config --global alias.lpa 'log --pretty=oneline --abbrev-commit'

        即git lpa

2.7 标签管理

        标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。例如,在项⽬ 发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样的标签来标识⾥程碑的意义。

        相较于难以记住的 commit id , tag 很好的解决这个问题,因为 tag ⼀定要给⼀ 个让⼈容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使⽤标签就能很快定位 到。

        对最新的一次提交进行打标签为v1.0;       

 

        也可以对之前提交进行打标签,只不过是要进行添加commit id;

        如下:

        标签的顺序是按照英文的顺序来进行排序的;

        对标签进行描述打标签:

        git tag -a v0.8 -m"ipmport tag v0.8" xxxxxx;

        查看描述信息:

删除标签:

        git tag -d v0.9

2.8 推送标签

        将本地的标签推送到远程仓库:git push origin v1.0

        推送所有标签:

        git push origin --tags

        论如何将本地的删除标签结果推送到中央仓库:

        git tag -d v1.0

        git push origin :v1.0

 

ps:本文到这里就结束了,谢谢观看!!! 

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

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

相关文章

多IP访问多网段实验

文章目录 多IP访问多网段实验 多IP访问多网段实验 在当前主机配置多个IP地址,实现多IP访问多网段,记录所有命令及含义 1,环境搭建: [rootlocalhost ~]# mount /dev/sr1 /mnt # 设置ISO虚拟镜像文件文件挂载点,将…

数据分析和可视化python库orange简单使用方法

Orange 是一个基于 Python 的数据挖掘和机器学习库,它提供了一系列可视化工具和算法,用于数据分析、机器学习和数据可视化等任务。 一、主要特点 可视化界面:Orange 提供了直观的可视化界面,使得用户可以通过拖放操作构建数据分…

【python爬虫实战】爬取全年天气数据并做数据可视化分析!附源码

由于篇幅限制,无法展示完整代码,需要的朋友可在下方获取!100%免费。 一、主题式网络爬虫设计方案 1. 主题式网络爬虫名称:天气预报爬取数据与可视化数据 2. 主题式网络爬虫爬取的内容与数据特征分析: - 爬取内容&am…

算法(四)前缀和

前缀和也是一个重要的算法,一般用来快速求静态数组的某一连续区间内所有数的和,效率很高,但不支持修改操作。分为一维前缀和、二维前缀和。 重要的前言! 不要死记模板,具体题目可能是前缀和、前缀乘积、后缀和、后缀乘…

已解决:ModuleNotFoundError: No module named ‘pip‘

[已解决] ModuleNotFoundError: No module named ‘pip‘ 文章目录 写在前面问题描述报错原因分析 解决思路解决办法1. 手动安装或升级 pip2. 使用 get-pip.py 脚本3. 检查环境变量配置4. 重新安装 Python 并确保添加到 PATH5. 在虚拟环境中安装 pip6. 使用 conda 安装 pip&…

无人机电机故障率骤降:创新设计与六西格玛方法论双赢

项目背景 TBR-100是消费级无人机头部企业推出的主打消费级无人机,凭借其出色的续航能力和卓越的操控性,在市场上获得了广泛认可。在产品运行过程,用户反馈电机故障率偏高,尤其是在飞行一段时间后出现电机过热、损坏以及运行不稳定…

《深度学习》dlib 人脸应用实例 仿射变换 换脸术

目录 一、仿射变换 1、什么是仿射变换 2、原理 3、图像的仿射变换 1)图像的几何变换主要包括 2)图像的几何变换主要分为 1、刚性变换: 2、仿射变换 3、透视变换 3)常见仿射变换 二、案例实现 1、定义关键点索引 2、定…

OpenHarmony 入门——ArkUI 自定义组件内同步的装饰器@State小结(二)

文章大纲 引言一、组件内状态装饰器State1、初始化2、使用规则3、变量的传递/访问规则说明4、支持的观察变化的场景5、State 变量的值初始化和更新机制6、State支持联合类型实例 引言 前一篇文章OpenHarmony 入门——ArkUI 自定义组件之间的状态装饰器小结(一&…

100多种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)

待更新(持续更新),早关注,不迷路............................................................................... 基于YOLOv8的车辆行人实时检测系统基于YOLOv10的车辆行人实时检测系统基于YOLOv11的车辆行人实时检测系统基于YOLOv8的农…

如何在UE5中创建加载屏幕(开场动画)?

第一步: 首先在虚幻商城安装好Async Loading Screen,并且在项目的插件中勾选好。 第二步: 确保准备好所需要的素材: 1)开头的动画视频 2)关卡加载图片 3)准备至少两个关卡 第三步&#xff1a…

PythonExcel批量pingIP地址

问题: 作为一个电气工程师(PLC),当设备掉线的时候,需要用ping工具来检查网线物理层是否可靠连接,当项目体量过大时,就不能一个手动输入命令了。 解决方案一: 使用CMD命令 for /L %…

二百六十八、Kettle——同步ClickHouse清洗数据到Hive的DWD层静态分区表中(每天一次)

一、目的 实时数仓用的是ClickHouse,为了避免Hive还要清洗数据,因此就直接把ClickHouse中清洗数据同步到Hive中就行 二、所需工具 ClickHouse:clickhouse-client-21.9.5.16 Kettle:kettle9.2 Hadoop:hadoop-3.1.3…

视频网站开发:Spring Boot框架的高效实现

5 系统实现 5.1用户信息管理 管理员管理用户信息,可以添加,修改,删除用户信息信息。下图就是用户信息管理页面。 图5.1 用户信息管理页面 5.2 视频分享管理 管理员管理视频分享,可以添加,修改,删除视频分…

linux线程 | 同步与互斥 | 全解析信号量、环形生产消费者模型

前言: 本节内容讲述linux下的线程的信号量, 我们在之前进程间通信那里学习过一部分信号量, 但是那个是systemV版本的信号量,是以进程间通信的视角谈的。 但是本篇内容会以线程的视角谈一谈信号量。 ps:本篇内容建议学习了生产者消…

Qml-Item的Id生效范围

Qml-Item的Id生效范围 前置声明 本实例在Qt6.5版本中做的验证同一个qml文件中,id是唯一的,即不同有两个相同id 的Item;当前qml文件中声明的id在当前文件中有效(即如果其它组件中传入的id,与当前qml文件中id 相同,当前…

国庆旅游高峰期,如何利用可视化报表来展现景区、游客及消费数据

国庆黄金周,作为国内旅游市场的年度盛宴,总是吸引着无数游客的目光。今年,随着旅游市场的强劲复苏,各大景区又再次迎来游客流量的高峰。全国国内出游7.65亿人次,同比增长5.9%,国内游客出游总花费7008.17亿元…

Java | Leetcode Java题解之第485题最大连续1的个数

题目&#xff1a; 题解&#xff1a; class Solution {public int findMaxConsecutiveOnes(int[] nums) {int maxCount 0, count 0;int n nums.length;for (int i 0; i < n; i) {if (nums[i] 1) {count;} else {maxCount Math.max(maxCount, count);count 0;}}maxCou…

一起搭WPF架构之livechart的MVVM使用介绍

一起搭WPF架构之livechart使用介绍 前言ModelViewModelView界面设计界面后端 效果总结 前言 简单的架构搭建已经快接近尾声了&#xff0c;考虑设计使用图表的形式将SQLite数据库中的数据展示出来。前期已经介绍了livechart的安装&#xff0c;今天就详细介绍一下livechart的使用…

前三章例题【现代控制理论】

【现代控制理论-状态空间方程能观性分解】https://www.bilibili.com/video/BV1KU4y1N7jV?p17&vd_source3cc3c07b09206097d0d8b0aefdf07958

如何下载3GPP协议?

一、进入3GPP网页 https://www.3gpp.org/ 二、点击“Specifications &Technologies” 三、点击“FTP Server” 网址&#xff1a; https://www.3gpp.org/specifications-technologies 四、找到“latest”&#xff0c;查看最新版 网址&#xff1a; https://www.3gpp.org/ftp…