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

news2024/9/19 9:28:09

目录

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.后面的内容就是我们的简称,后面的这个东西就是想要被我们简化的东西,一般初学者不建议直接使用;

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

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

相关文章

【递归回溯之floodfill算法专题练习】

1. 图像渲染 class Solution {int dx[4] {0, 0, -1, 1};int dy[4] {1, -1, 0, 0};int m, n;int oldcolor; public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {oldcolor image[sr][sc]; // 保存原…

Java常用API(BigDecimal)

用于小数的精确计算 用来表示很大的小数 构造方法获取BigDecimal对象 public BigDecimal(double val) public BigDecimal(string val) 静态方法获取BigDecimal对象 public static BigDecimal value0f(double val) 1.通过传递double类型的小数来创建对象 这种方式有可能…

Linux|软件开发的基础概念|软件的源码本地编译和交叉编译概念

前言&#xff1a; 本文主要讲述软件的源码本地编译和交叉编译的基本概念&#xff0c;首先&#xff0c;是介绍什么是本地编译&#xff0c;什么是交叉编译&#xff0c;其次&#xff0c;本地编译和交叉编译到底是有什么用处&#xff0c;最后是交叉编译和本地编译的具体应用场景 …

边听边打?不再是难题,4款音频转文字神器推荐

无论是会议记录、课堂笔记还是采访录音&#xff0c;能快速准确地转录成文本&#xff0c;那可是大大提高了工作效率。市面上有几款工具在这方面做得不错&#xff0c;比如365在线转文字、布谷鸟配音、腾讯云语音识别和Speechnotes。今天就来个大比拼&#xff0c;看看它们各自的表…

人机交互的频率、时长、周期

人机交互的频率是指用户与系统互动的频繁程度&#xff1b;时长是每次互动的持续时间&#xff1b;周期是指在特定时间段内进行互动的规律或间隔。人机交互的频率、时长和周期通常与以下因素有关&#xff1a; &#xff08;1&#xff09;任务复杂性&#xff1a;复杂任务需要更多的…

docker部署clickhouse

1. 创建相关配置目录 mkdir -P /data/clickhouse/data mkdir -P /data/clickhouse/conf mkdir -P /data/clickhouse/log 2. 拉取镜像 # 下载最新版本clickhouse docker pull clickhouse/clickhouse-server # 下载指定版本clickhouse docker pull clickhouse/clickhouse…

电商数据分析:如何抓住关键指标提高销售额

在电商运营中&#xff0c;数据分析是不可或缺的一环。通过精准的数据分析&#xff0c;商家可以更好地了解市场动态、优化运营策略&#xff0c;从而提升销售业绩。然而&#xff0c;很多运营者在面对海量数据时常常无从下手。那么&#xff0c;电商运营到底该如何进行数据分析&…

Chapter 05 计算属性

欢迎大家订阅【Vue2Vue3】入门到实践 专栏&#xff0c;开启你的 Vue 学习之旅&#xff01; 文章目录 前言一、基础语法二、计算属性vs方法三、完整写法 前言 Vue.js 提供了丰富的功能&#xff0c;帮助开发者高效地构建用户界面。本篇文章详细讲解了其计算属性的基本语法、应用…

笔记整理—uboot启动过程(7)malloc初始化与内存环境变量

上一章说到了env环境变量并对前两章有关init_sequence部分做了总结&#xff0c;这一章将要对uboot部分的malloc初始化以及内存环境变量进行相关的说明。 mem_malloc_init是用于初始化uboot堆管理器的。自己维护了一段内存&#xff0c;就可用进行malloc和free的操作了。那么这个…

Mac/Linux系统matplotlib中文支持问题

背景 matplotlib是python中最常用的数据可视化分析工具&#xff0c;Mac和Linux系统无中文字体&#xff0c;不支持中文显示&#xff08;希望后续可以改进&#xff09;&#xff0c;需要进行字体的下载和设置才能解决。笔者经过实践&#xff0c;发现Mac系统和Linux系统解决方案略…

数据结构算法基础-单链表的新建(头插法、尾插法)

1.头插法 2.尾插法 3.代码及运行结果 设输入的值为&#xff1a;3 4 5 6 7&#xff08;到9999终止读值&#xff09; #include <stdio.h> #include <stdlib.h> typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next; }LNode,*LinkList;LinkL…

02 vue3之ref全局桶

ref 接受一个内部值并返回一个响应式且可变的 ref 对象。ref 对象仅有一个 .value property&#xff0c;指向该内部值。 <template><div class"">Ref:{{ name.a }}</div><button click"change()">change</button> </te…

如何用Java构建学生档案管理系统:实现学生信息的高效管理

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Mybatis缓存、java反射(精简秒懂版)

目录 一、缓存 1.mybatis一级缓存 2.mybatis二级缓存 开启二级缓存 二、Java反射机制概念 1.Java反射概念 2.Java反射相关api 三、Java反射相关类 1.Class类&#xff08;反射基础&#xff09; &#xff08;1&#xff09;Object类中的getClass方法&#xff1a;适用于通过对…

sdk监控平台

监控平台实现方案 监测网页加载时长是关注的是以下5个过程&#xff1a; 1.重定向时间&#xff1a;获取此网页前重定向所花费的时间 2.DNS域名查找时间&#xff1a;查找此网页的DNS所花费的时间 3.TCP服务器连接时间&#xff1a;用户连接到您的服务器所需的时间 4.服务器响应…

基于文心智能体平台打造的德语学习助手

德语学习助手&#xff1a;您的智能德语语言学专家 在学习德语的道路上&#xff0c;是否曾遇到过这样的困扰&#xff1a;不知道自己的德语水平如何&#xff1f;学习过程中缺乏系统的计划&#xff1f;在日常交流中总是担心表达不准确&#xff1f;或者在面对德语文本时&#xff0c…

[深度学习] 时间序列分析工具TSLiB库使用指北

TSLiB是一个为深度学习时间序列分析量身打造的开源仓库。它提供了多种深度时间序列模型的统一实现&#xff0c;方便研究人员评估现有模型或开发定制模型。TSLiB涵盖了长时预测&#xff08;Long-term forecasting&#xff09;、短时预测&#xff08;Short-term forecasting&…

【力扣】划分为k个相等的子集

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 给定一个整数数组 …

Learn OpenGL In Qt之系列简介

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~ 个人主页&#xff1a; rainInSunny | 个人专栏&#xff1a; C那些事儿、 Learn OpenGL In Qt 文章目录 传送门写在前面为什么是OpenGL和Qt能学到什么能做点什么国漫女神炫酷进度冷酷机器人 传送门 待更新 写在前面 本博客系列将带领读…

Vue——初识vue

目录 1.浏览器控制台报错 2.Vue入门 3.Vue模版语法 4.数据绑定 5.el与data的两种写法 总结 本系列属于纯干货系列&#xff0c;我们也不多说&#xff0c;直接上干货。 1.浏览器控制台报错 GET http://127.0.0.1:5500/favicon.ico 404 (Not Found) 具体如下图 这是为什么…