Git的基本操作

news2024/11/16 3:22:16

文章目录

  • 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

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

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

相关文章

基于matlab的斜视模式下SAR建模

一、前言此示例说明如何使用线性 FM &#xff08;LFM&#xff09; 波形对基于聚光灯的合成孔径雷达 &#xff08;SAR&#xff09; 系统进行建模。在斜视模式下&#xff0c;SAR平台根据需要从宽侧斜视一定角度向前或向后看。斜视模式有助于对位于当前雷达平台位置前面的区域进行…

mysql EXPLAIN关键字

EXPLAIN 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句&#xff0c;从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。通过EXPLAIN&#xff0c;我们可以分析出以下结果&#xff1a; 表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索…

一文吃透SQL性能优化,阿里47条军规

目录1、先了解MySQL的执行过程2、数据库常见规范3、所有表必须使用Innodb存储引擎4、每个Innodb表必须有个主键5、数据库和表的字符集统一使用UTF86、查询SQL尽量不要使用select *&#xff0c;而是具体字段7、避免在where子句中使用 or 来连接条件8、尽量使用数值替代字符串类型…

【数据挖掘实战】——中医证型的关联规则挖掘

目录 一、背景和挖掘目标 1、问题背景 2、传统方法的缺陷 3、原始数据情况 4、挖掘目标 二、分析方法和过程 1、初步分析 2、总体过程 第1步&#xff1a;数据获取 第2步&#xff1a;数据预处理 第3步&#xff1a;构建模型 三、思考和总结 项目地址&#xff1a;Data…

YOLOv6-目标检测论文解读

文章目录摘要问题算法网络设计BackboneNeckHead标签分配SimOTA&#xff08;YOLOX提出&#xff09;&#xff1a;TAL&#xff08;Task alignment learning&#xff0c;TOOD提出&#xff09;损失函数分类损失框回归损失目标损失行业有用改进自蒸馏图像灰度边界填充量化及部署实验消…

测试1:测试相关概念

1.测试相关概念 1.1.测试概念 1.1.1.需求 符合正式文档规定的条件和权能&#xff0c;包括用户需求和软件需求 它们之间的的转换是&#xff1a;沟通 用户需求和软件需求的区别&#xff1a; 能否指导开发人员开发&#xff0c;测试人员编写测试用例 1.1.2.缺陷Bug 与正确的…

补充前端面试题(三)

图片懒加载<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, in…

「数据仓库」怎么选择现代数据仓库?

构建自己的数据仓库时要考虑的基本因素我们用过很多数据仓库。当我们的客户问我们&#xff0c;对于他们成长中的公司来说&#xff0c;最好的数据仓库是什么时&#xff0c;我们会根据他们的具体需求来考虑答案。通常&#xff0c;他们需要几乎实时的数据&#xff0c;价格低廉&…

[SSD科普之1] PCIE接口详解及应用模式

PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准&#xff0c;它原来的名称为“3GIO”&#xff0c;是由英特尔在2001年提出的&#xff0c;旨在替代旧的PCI&#xff0c;PCI-X和AGP总线标准。一、PCI-E x1/x4/x8/x16插槽模式PCI-E有 x1/…

day20_经典接口(Comparable丶Comparator)

由来 我们知道基本数据类型的数据&#xff08;除boolean类型外&#xff09;需要比较大小的话&#xff0c;之间使用比较运算符即可&#xff0c;但是引用数据类型是不能直接使用比较运算符来比较大小的。那么&#xff0c;如何解决引用类型比较大小的问题&#xff1f; java.lang…

基于Spring、Spring MVC、MyBatis的房屋销售购买系统

文章目录项目介绍主要功能截图&#xff1a;登录前台首页后台首页房屋区域管理出租房屋审核账号管理部分代码展示设计总结项目获取方式&#x1f345; 作者主页&#xff1a;Java韩立 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题…

vTESTstudio - VT System CAPL Functions - VT2004(续2)

不要沮丧&#xff0c;不必惊慌&#xff0c;做努力爬的蜗牛或坚持飞的笨鸟&#xff0c;我们试着长大&#xff0c;一路跌跌撞撞&#xff0c;哪怕遍体鳞伤。vtsSetPWMVoltageLow - 设置PWM输出上的低电压功能&#xff1a;指定数字输出信号&#xff08;尤其是PWM信号&#xff09;输…

2023年美赛C题Wordle预测问题一建模及Python代码详细讲解

相关链接 &#xff08;1&#xff09;2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 &#xff08;2&#xff09;2023年美赛C题Wordle预测问题二建模及Python代码详细讲解 &#xff08;3&#xff09;2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解 &…

史密斯圆图

在射频、微波中&#xff0c;常常使用史密斯圆图来做阻抗匹配。在不涉及复杂的数学推导&#xff0c;仍能把圆图用起来。 比如&#xff0c;共轭匹配。 RL1jX&#xff0c;需要找到-jX来抵消jX&#xff0c;消掉虚部之后&#xff0c;只留下实部&#xff0c;最终等效为RL‘1。 史密…

Android 基础知识4-2.7 RelativeLayout(相对布局)

一、RelativeLayout的概述 RelativeLayout&#xff08;相对布局&#xff09;是一种根据父容器和兄弟控件作为参照来确定控件位置的布局方式。在很多时候&#xff0c;线性布局还不能满足我们的需求&#xff0c;比如&#xff0c;我们在一行&#xff08;列&#xff09;上显示多个控…

C#反射原理

一、前言反射&#xff08;Reflection&#xff09;的内容在博客中已经写了一篇&#xff0c;什么是反射&#xff0c;反射的使用&#xff0c;反射优缺点总结&#xff1b;在面试中突然被问道反射的原理&#xff0c;按照理解反射就是在Reflection命名空间和对象的Type对象获取类的方…

Innodb索引还不清楚?看这一篇就够啦

1. 索引是什么 1.1 初识索引 ------------------- | id | name | age | ------------------- | 1 | 帅哥1 | 30 | | 2 | 帅哥2 | 18 | | 3 | 帅哥3 | 25 | | 4 | 帅哥4 | 21 | | 5 | 帅哥5 | 29 | | 6 | 帅哥6 | 35 | -------------------…

基于飞桨PaddleClas完成半导体晶圆图谱缺陷种类识别

wolfmax老狼&#xff0c;飞桨领航团无锡团团长&#xff0c;飞桨开发者技术专家&#xff08;PPDE&#xff09;&#xff0c;AICA六期学员&#xff0c;某半导体CIM软件集成商图像算法工程师&#xff0c;主要研究方向为图像检测、图像分割等算法。• 作者AI Studio主页https://aist…

Android开发:Activity启动模式

1.怎样设置Activity的启动模式 可以在清单文件中自己添加活动的启动模式, android : launchMode"standard", 不写的话系统默认就是标准模式. 2.启动模式 2.1.默认启动模式 标准启动模式就是栈, 打开一个活动就将活动压入栈中, 返回就将活动退出栈中. 不同的Activit…

老大react说:schedule,我们今年的小目标是一个亿

hello&#xff0c;这里是潇晨&#xff0c;今天来讲个故事 讲个故事&#xff1a; 从前&#xff0c;有家z公司&#xff0c;z公司的ceo叫react&#xff0c;它收下有个小弟或者叫小leader&#xff0c;schedule schedule每天负责消化老大react画的大饼&#xff0c;然后将拆解成一…