Git的基本操作
文章目录
- 1.git的工作流程
- 2.git的工作环境
- 3.git的基本操作
- (1)git init
- (2)git status
- (3)git add
- (4)git commit
- 4.版本控制
- (1)git reflog与git log
- (2)再增加两个版本
- (3)git reset --hard 版本号
- (4)两个指针
- 4.分支管理
- (1)对分支的理解
- (2)git branch和git branch -v
- (3)git checkout 分支名
- (4)git merge
- 5.远程库操作
- (1)基本操作
- (2)几个区别
- (3)使用格式
1.git的工作流程

其中github和gitee是基于互联网的,而gitlab是基于局域网的。公司一般使用的是gitlab。
2.git的工作环境
下载安装好git之后,选择一个工作目录,并在该目录右键鼠标,点击git bash here,当然也可以git gui here它是一个图形界面但是由于太丑了,所以一般使用git bash。

git bash的命令和linux是一致的,虽然这里是windows系统。甚至vim也是可以使用的
3.git的基本操作
(1)git init
该操作用于初始化本地库,在终端输入git init后可以在当前目录看到一个.git的文件夹(需要查看隐藏文件)。

注意该文件夹中的内容是不可以修改的创建成功的话就可以进行基本的git操作了。
(2)git status
用于查看当前库的状态:

可以发现出现了三行内容,其中第一行表示的意思是处于master分支中,第二行表示的是还没有提交任何东西,第三行表示的是没有什么需要提交。
这个命令我们在之后的git学习中会频繁的使用到。
(3)git add
使用vim来创建一个test.txt文件,来模拟一下提交过程:

以上是随便写的文件的内容,创建文件之后再使用git status操作:

可以看到test.txt是红色的,表示没有放入暂存区(当前该文件只在工作区存在),并且终端给了提示,使用git add操作将其放入暂存区。
当进行git add操作之后:

此时可以看到test.txt变成了绿色,表示已经将它放入了暂存区,并且给了如下提示:
git rm --cached test.txt
该条指令的作用就是从暂存区删除test.txt,如果删除test.txt会再度变为红色。
(4)git commit
该条指令用于从暂存区提交到本地库,通常伴随使用-m选项来写日志

其中提交之后会打印一段话,表示提交成功了,并出现了一个数字b26d1b8,它是版本号的一部分,通常代表版本号。
此时再使用git status可以看到:

第一行表示的是在主分支中,第二条表示的是没有什么可以提交了,并且树时干净的,即没有做任何版本修改。
4.版本控制
(1)git reflog与git log
git reflog输出日志信息,git log也输出日志信息不过更加详细

其中head是一个指针,它指向的是主分支b26d1b8表示的是版本号,master分支指向该版本号。
(2)再增加两个版本
使用git add和git commit再使用以上方法增加两个版本,这里有一个细节,在修改test.txt并进行commit之后会看到

其中我修改了一行内容,可以发现实际操作是删除了一行并加入了一行,也就是说git是按行对文件操作的,而不能在行内追加。
此时再输出日志信息可以看到:

此时head指针指向的是master分支,master分支指向的是版本3
(3)git reset --hard 版本号
当处于第三个版本的时候,可以看到test.txt的内容是

如果我们想回退到版本2或者版本1呢?使用以下指令可以回退
git reset --hard 版本号

此时就回退到了版本2,再查看test.txt的内容,发现就是版本2的内容了

那么如果我们此时修改版本2呢?修改后提交的还是版本2吗?显然不是,修改版本2再提交就是第4个版本了:

(4)两个指针
通过以上的描述我们发现其实是有两个指针的,其中Head指针指向的是分支号,master指针指向的是版本号:

我们还可以在.git/refs/heads/master中看到当前分支以及版本号信息。
4.分支管理
(1)对分支的理解
要完成一个项目需要做不同的功能,可以将每个功能作为一个分支最终合并分支形成一个完整的项目:

比如在这里,首先将master分支拷贝两个分支branch1和branch2来完成不同的任务,其中branch1完成任务后提交,如果提交后发生了错误,就建立一个新的分支hot-fix来进行紧急修复,修复后再与branch2完成的任务进行合并。
分支的作用有两个:解耦(安全)和并行开发(提高效率)。
(2)git branch和git branch -v
使用git branch可以创建分支,使用git branch -v可以查看分支:

*所在的位置就是当前所在的分支。
(3)git checkout 分支名
切换分支

(4)git merge
git merge分为两种情况,一种情况发生冲突,一种情况没有发生冲突,一种是发生了冲突。
发生冲突的意思是两者都对代码的同一个位置进行了修改。
首先来看没有发生冲突的情况:

我们对hot-fix的版本做如上修改。并进行提交到本地库的操作。
然后我们切换到master分支并进行法分支合并,此时可以先查看一下master分支中的内容:

注意,由于master分支是没有做任何修改的,因此合并是不冲突的。冲突的意思是两者都发生了修改:
此时执行git merge指令,注意,当前我们是处于master分支的,是hot-fix分支来找我们进行合并:

合并之后我们发现内容变成了这个样子。
下面来看有冲突合并的例子,即当分支做了修改之后,master的分支代码也进行了修改。
此时还可以分为两种情况,第一种情况是,master和hot-fix没有修改代码的同一个位置,第二种情况是master和hot-fix修改了代码的同一个位置。
注意,修改之后需要进行提交,否则会影响其他分支。
当没有修改代码同一个位置的时候,与没有发生冲突的结果是一样的,这里不作演示了,当修改的是代码的同一个位置的时候:
首先我们将hot-fix分支进行修改。(注意需要提交)

此时我们再切换回主分支,对主分支的倒数第二行增加内容(冲突),再添加一些其他内容,并提交

此时再进行分支合并,可以看到文件的结果变为:

变成了使用<<<<和===以及>>>>来分割的内容,其中既包含主分支的内容,也包含hot-fix分支的内容。
需要程序员手动对代码进行修改之后再进行提交。因为git无法帮助我们自动选择了。
此时我们打开vim将代码修改如下:
然后再进行提交,注意这里还有一个问题,此时如果commit加上文件名就会发生报错:

在commit的时候不能加入文件名就可以提交成功了。
值得注意的是由于是在master进行分支合并,因此是将hot-fix的内容合并到master中,而hot-fix的内容没有发生改变。
5.远程库操作
(1)基本操作
远程库操作比较简单,只需要记住三个指令即可:
git clone
git push
git pull
git clone的作用是将别人已经写好并提交的库克隆下来,自己更新迭代之后使用git push提交上去,想得到别人更新迭代的内容只需要git pull即可,这里用一张图来表示执行的顺序:

其中pull作用是拉取修改之后的内容。
(2)几个区别
git clone与git pull区别
git clone和git pull的区别在于“git clone”是在本地没有版本库时,将远程库整个下载到本地;而“git pull”是在本地有版本库时,从远程库中获取最新commit数据,并合并到本地。
同时在开发时要尽量保证push的内容没有版本冲突。如果不想与本地分支合并,可以使用git fetch操作。git pull=git fetch+git merge
git clone与git fetch区别
而git clone和git fetch的区别在于git clone克隆的是整个远程库。git fetch克隆的是远程库的一个分支。
(3)使用格式
$ git clone <版本库的url>
$ git pull <远程主机名> <远程分支名>:<本地分支名>#方法一
$ git fetch origin master #从远程的origin仓库的master分支下载代码到本地的origin maste
$ git log -p master.. origin/master #比较本地的仓库和远程参考的区别
$ git merge origin/master #把远程下载下来的代码合并到本地仓库,远程的和本地的合并# 方法二
$ git fetch origin master:temp #从远程的origin仓库的master分支下载到本地并新建一个分支temp
$ git diff temp #比较master分支和temp分支的不同
$ git merge temp #合并temp分支到master分支
$ git branch -d temp #删除temp相关文章:
Git的基本操作
文章目录1.git的工作流程2.git的工作环境3.git的基本操作(1)git init(2)git status(3)git add(4)git commit4.版本控制(1)git reflog与git log(2)再增加两个版本(3)git reset --hard 版本号(4)两个指针4.分支管理(1)对分支的理解(2)git branch和git branch -v(3)git checkout 分…...
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
目录7 两数之和题目描述:解题思路与代码暴力解法:解法一:二分查找解法二:双指针2 斐波那契数列题目描述:解题思路与代码解法一&…...
测试1:测试相关概念
1.测试相关概念 1.1.测试概念 1.1.1.需求 符合正式文档规定的条件和权能,包括用户需求和软件需求 它们之间的的转换是:沟通 用户需求和软件需求的区别: 能否指导开发人员开发,测试人员编写测试用例 1.1.2.缺陷Bug 与正确的…...
2.19 索引和事务
一.联合查询面试问题:聚合查询与联合查询的区别聚合查询是行与行之间的数据加工聚合函数 :count,sum,avg...group by 进行分组,指定列的值,相同的记录合并到同一个组,每个组又可以分别进行聚合查询分组还可以指定条件筛选,如果分组之前指定条件 用where,如果对分组之后指定条件…...
算法导论【摊还分析】—聚合分析、核算法、势能法
算法导论【摊还分析】—聚合分析、核算法、势能法聚合分析核算法势能法假定我们对一个数据结构执行一个由 n 个操作组成的操作序列,当 i 严格为 2 的幂时,第 i 个操作的代价为 i,否则代价为 1 聚合分析 总共有n个操作,1,2,4.....…...
【LeetCode】剑指 Offer 08. 二叉树的下一个节点 p65 -- Java Version
题目链接:无题目链接,不知道为啥力扣上找不到这一题。 1. 题目介绍(08. 二叉树的下一个节点) 题目:给定一个二叉树和其中的一个节点,请找出中序遍历顺序的下一个节点并且返回。注意,树中的节点…...
Python 之 Pandas Series 数据结构
文章目录一、Series 结构二、数据结构 Series 创建1. 创建1.1 列表/数组作为数据源创建 Series1.2 字典作为数据源创建 Series1.3 通过标量创建2. 参数说明2.1 index 参数2.2 name 参数2.3 copy 参数三、Series 的索引/切片1. 下标索引2. 标签索引3. 切片四、Series 数据结构的…...
【java基础】Java常用类———包装类
包装类 wrapper 装箱与拆箱 装箱:基本类型->包装类; 拆箱: 包装类->基本类型 public class Integer01 {public static void main(String[] args) {//演示int <--> Integer 的装箱和拆箱//jdk5前是手动装箱和拆箱//手动装箱 in…...
linux shell 入门学习笔记3 shebang
shebang 计算机程序中,shebang指的是出现在文本文件的第一行前两个字符#! 在Unix系统中,程序会分析shebang后面的内容,作为解释器的指令,例如 以#!/bin/sh 开头的文件,程序在执行的时候会调用/bin/sh,也就…...
写作小课堂:简历模版【A4纸正反两面】(20230219)
文章目录 I 联系方式II 个人信息III 求职意向IV 工作经验2018年-11月-至今全城淘信息技术服务有限公司2017年07月-2018年-11月湖南微流网络科技有限公司2014年06月-2017年07月湖南高阳通联信息技术有限公司V 项目经验2018年11月-至今全城淘淘管家2017年10月-2018年11月ASO(机刷…...
一文搞懂 DevOps
前言 DevOps作为一个热门的概念,近年来频频出现在各大技术社区和媒体的文章中,备受行业大咖的追捧,也吸引了很多吃瓜群众的围观。 那么,DevOps是什么呢? 有人说它是一种方法,也有人说它是一种工具&#…...
深入讲解Kubernetes架构-租约
分布式系统通常需要租约(Lease);租约提供了一种机制来锁定共享资源并协调集合成员之间的活动。 在 Kubernetes 中,租约概念表示为 coordination.k8s.io API 组中的 Lease 对象, 常用于类似节点心跳和组件级领导者选举等…...
微信小程序学习第11天——Vant Weapp组件库、API Promise化、全局数据共享Mobx、分包
目录一、小程序对npm 的限制二、使用Vant Weapp组件库1、安装组件2、使用组件3、定制全局样式三、API Promise化1、下载miniprogram-api-promise2、引入3、使用四、全局数据共享五、分包1、分包概念2、使用分包3、独立分包4、分包预下载一、小程序对npm 的限制 在小程序中使用…...
Python3-基本数据类型
Python3 基本数据类型 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。 等号&…...
RPA落地指南:什么是RPA
什么是RPA RPA在企业中起什么作用并扮演什么角色呢?想要充分了解RPA,我们需要知道RPA的相关概念、特点、功能以及能解决的问题。接下来对这些内容进行详细介绍。 1.1 RPA的3个核心概念 RPA的中文译名是“机器人流程自动化”,顾名思义&…...
跨域问题的三种解决办法
我们平时对于前后端联调的项目,以下的错误是经常常见的,我们查看浏览器报错: Access to XMLHttpRequest at http://localhost:63110/system/dictionary/all fromorigin http://localhost:8601 has been blocked by CORS policy: No Access…...
c++提高篇——string容器
一、string基本概念 string是C风格的字符串,而string本质上是一个类。 与c语言不同,string是一个类,类内部封装了char*,管理这个字符串,是一个char型的容器。在根本上与c语言字符串是一致的。 在string类内部封装了很…...
[软件工程导论(第六版)]第6章 详细设计(复习笔记)
文章目录6.1 结构程序设计6.2 人机界面设计6.3 过程设计的工具6.3.1 程序流程图(程序框图)6.3.2 盒图(N-S图)6.3.3 PAD图(问题分析图)6.3.4 判定表6.3.5 判断树6.3.6 过程设计语言6.4 面向数据结构的设计方…...
RabbitMQ核心内容:实战教程(java)
文章目录一、安装二、入门1.分类2.核心概念3.工作原理4.六大模式三、模式一:"Hello World!"1.依赖2.生产者代码3.消费者代码四、模式二:Work Queues1.工作原理2.工具类代码:连接工厂3.消费者代码4.生产者代码5.分发策略不公平分发预…...
RK356x U-Boot研究所(命令篇)3.7 pci与nvme命令的用法
平台U-Boot 版本Linux SDK 版本RK356x2017.09v1.2.3文章目录 一、设备树与config配置二、pci命令的定义三、nvme命令的定义四、pci与nvme命令的用法3.1 pci总线扫描3.2 nvme设备信息3.3 nvme设备读写一、设备树与config配置 RK3568支持PCIe接口,例如ROC-RK3568-PC: 原理图如…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
