git学习教程--分支操作+远程仓库相关过程详述

2024-08-29 03:04

本文主要是介绍git学习教程--分支操作+远程仓库相关过程详述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.分支

1.1查看已有分支

1.2新的分支的创建

1.3改变指针的指向

1.4合并分支

2.删除分支

3.合并冲突

3.1一个简单操作

3.2手动解决冲突

4.git分支管理策略

4.1fast-forward模式

4.2no-ff模式

4.3总结

5.bug修复建议

6.强制删除

7.分布式版本控制系统

7.1远端仓库概念

7.2clone的过程

7.3push的过程

7.4pull的过程

7.5.ignore文件

7.6配置命令别名


1.分支

head指针可以指向任何的分支,不仅仅是master分支;head指向哪一个分支,哪一个分支就是当前正在工作的分支;

对于分支这个内容,我想要使用下面的方式进行介绍:

1.1查看已有分支

在正常的情况下,我们去创建一个文件,进入到对应的文件的目录下面,这文件里面通常都会有一个master分支,我们可以使用git branch指令进行查看;

这个master前面的星号表示的就是指针的意思,这个星号就是表示这个head指针指向的内容就是这个里面的master分支,这个master分支就是目前正在工作的分支;

1.2新的分支的创建

我们创建一个新的分支dev,我们想要对于这个dev分支进行操作,最后把这个dev分支和我们的master分支进行合并;

1.3改变指针的指向

我们使用这个git checkout(我们上一次介绍这个指令是因为后面加上两个横岗就可以表示对于这个文件的删除)现在我们不需要加上两个横岗,这个表示改变head指针的指向,让这个指针指向dev新的分支;

1.4合并分支

我们使用merge命令对于两个分支进行合并,这个时候master也会指向最新的提交内容;

上面的这些实际上都有自己对应的操作,但是我就不演示了,因为这个我们只需要会上传,了解三板斧,知道这个master是一个主要分支,我们的其他的分支都会被合并到我们的主分支上面;

此外,我们了解这个版本库,工作区,暂存区的概念等等,知道这个仓库的管理相关知识即可;

2.删除分支

上面我们创建这个dev分支,我们在这个分支上面做一些操作之后,这个时候使用merge进行合并,合并之后我们的dev分支上面的内容已经进行了更新,这个时候我们可以使用下面的指令删除这个分支:

git branch -d dev   %这个-d选项后面的就是删除分支的名字

需要注意的是,我们想要删除某一个分支的时候,我们需要在别的分支下面去删除,就是我们不能再这个分支下面删除这个分支,只能切换到别的分支进行这个分支的删除,后面强制删除分支也是这样的

3.合并冲突

3.1一个简单操作

首先介绍一个小操作:就是我们之前都是先创建一个分支,然后切换到这个分支,我们之前都是使用两行指令,现在我们使用一个-b选项就可以使用一行指令实现这个创建并切换的问题;

3.2手动解决冲突

问题的背景就是我们原来有一个文件内容是在dev分支上面,内容是aaa,我们在这个dev上面把这个aaa修改为bbb,然后切换到master分支上面,我们修改为ccc,这个时候进行add,commit,push操作就会报错,因为这个时候git不知道我们应该是提交bbb的这个修改内容,还是ccc的这个修改内容,这个时候我们需要手动的进行这个数据的修改,确定全部使用bbb或者是全部使用ccc,然后重新进行三板斧的操作;

下面这个就是开始的时候这个相关的分支情况,这个时候dev分支的内容就是bbb;

下面的这个就是我们手动解决之后的这个情况,即这个master指向新的修改内容;

4.git分支管理策略

4.1fast-forward模式

这个模式就是我们日常使用的时候默认的一个模式,这个时候我们如果删除这个dev分支,我们没有办法判断master上面的这个最新分支是merge进来的还是正常的提交进来的;

4.2no-ff模式

这个就是当时我们在遇到上面的分支冲突的时候使用的一个模式,这个模式下面,即使我们删除了这个分支,我们还是可以看出来这个master分支是有其他的分支合并上来的;

4.3总结

我们上面的这个ff(fast  forward模式简写)还是no-ff模式,实际上这个都是为了解决我们看到这个历史版本的问题;

如果我们使用的这个ff模式,我们把这个dev临时分支删除之后,这个master上面的这个最新内容就无从得知是提交的还是合并的;

但是如果我们使用这个no-ff模式,就是加上这个--no-ff选项,那么就会在merge的时候生成一个新的commit,即使我们删除这个临时分支,也可以看到这个历史的分支记录;

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

5.bug修复建议

我们进行开发的时候,往往是多个人进行协同合作,这个时候如果遇到了问题,我们就需要展示把自己的dev分支这个程序放到stash里面去;

然后我们就切换到这个新的分支上面进行这个bug的修复,修复完成之后,这个再回到我们的dev上面继续我们的开发;

我们的修复完成,dev分支也完成了,这个时候我们不能直接进行合并,因为这个时候可能会合并冲突,我们的方法就是先在这个dev分支上面进行合并,如果出现问题就在我们的本地进行解决,然后再提交;

如果我们直接在这个master分支上面合并dev分支,这个时候如果出现合并冲突就会出现更大的bug,这个时候我们建议先在我们的本地上面合并,解决之后再提交;

6.强制删除

就是我们一般在一个分支上面进行操作,不想要这个分支的话是可以直接删除的,但是如果我们在这个分支进行了commit之后,我们的系统就会认为这个分支对于我们有用,不会让我们轻易的删除的,我们这个时候如果就是想删除;

我们之前使用的-d删除指令,改为-D指令就可以强制删除这个分支了;

7.分布式版本控制系统

7.1远端仓库概念

我们之前一直说这个远端仓库,到底什么是真正的远端仓库,今天这个远端仓库就会浮出水面,实际上这个远端仓库就是一个中央服务器,方便我们进行协作;

分布式就是我们的这个电脑是分布式,我们可以在自己的电脑上面进行开发,这个时候我们可以把我们进行的这个操作推送到远程仓库,别人想要看的话直接拉取这个仓库就可以了;

这样的话,无论我们的本地怎么出现问题,只要这个中央服务器没事,这个过程就不会受到影响;而上面的这个操作,都是在码云上面完成的;

7.2clone的过程

git clone +https/ssh就是把我们的远程仓库克隆到本地的命令,这个https协议是可以直接使用的,具体的位置在我们的这个位置:

https协议

使用https进行克隆的话,相对比较简单,也是我们经常使用的,这个ssh稍有复杂,但是也可以实现相同的功能;

ssh协议

我们这个ssh不能直接使用是因为这个需要有对应的密钥进行连接我们的git,这个需要我们自己完成

如果我们直接像这个https一样提交上去的话,这个就会报错,说我们的这个访问权限不具备;这个是因为我们的公匙没有添加到远端库里面,因此这个服务器拒绝我们的clone的请求;

这个时候我们按照这个步骤创建ssh key:

这个ls -a .ssh.就是去查看这个ssh目录下面有没上面的两个文件,我们把这个里面的公匙的内容进行复制,粘贴到我们的gitee对应的为止:

 

7.3push的过程

进行这个push是因为我们的本地仓库有的内容,远端仓库没有,因此这个时候我们需要进行push,把这个中央服务器仓库进行更新;

push就是把我们写的内容推送到我们的远程仓库里面去,使用下面的指令:

origin就是我们的远程仓库,master到masetr,第一个master指的是我们的本地仓库的master,第二个才是我们的远端仓库的master分支,这两个名字一样,可以只写一个;

git push origin master:master

clone的时候,这个master进行联系,因为这个push实际上就是这个分支与分支的关联,建立联系之后这个push才会正常,但是我们clone克隆的时候,两个master已经建立了联系,可以正常的push操作;

7.4pull的过程

这个pull是因为我们的远端仓库里面的内容我们本地没有,这个一般就是进行协同开发的时候,其他人推送的内容使得这个语远端仓库里面的内容我们本地没有,这个时候我们就可以使用这个pull进行拉取的操作,让我们可以看到这个远程仓库的更新内容;

git pull origin master:master

实际上这个pull进行的就是拉取+合并的操作,

7.5.ignore文件

我们push的时候,并不是想要把所有的文件全部推送过去,这个时候,我们的,ignore就是进行这个文件的筛选的,过滤掉我们不想推送的文件;

*.so表示的就是so后缀的文件就会被过滤掉,!c.so表示即使这个文件是so的后缀,这个文件有特权不被过滤掉,这个ignore是我们可以进行修改的,根据我们的个人需求;

git add -f 强制添加这个文件,即使这个文件是我们的ignore里面会被过滤的文件,这个和上面的作用是一样的,就是给了这个对应文件“特别通行证”;

如果我们的这个.ignore的内容很多,我们也不清楚我们的这个文件会不会被过滤以及相关的原因,我们可以使用下面的指令查看我们的文件为什么会被过滤掉:

7.6配置命令别名

就是我们的这个指令名字比较长,我们使用这个alias.进行简化,这个alias.后面的内容就是我们的简称,后面的这个东西就是想要被我们简化的东西,一般初学者不建议直接使用;

这篇关于git学习教程--分支操作+远程仓库相关过程详述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116653

相关文章

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee