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: 原理图如…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...
