git教程(1)---本地仓库操作

git教程

  • git安装-Centos
  • 基本操作
    • git init
    • git config
    • 工作区和版本库
      • 工作区
      • 暂存区/索引
      • 版本库
    • 添加文件---场景一
      • git status
      • git log
      • 查看.git目录结构
    • 添加文件---场景二
    • 修改文件
    • 版本回退
    • 撤销修改
      • 场景一只有工作区有code
      • 工作区和暂存区有code
      • 所有区域都有code并且没有push到远程仓库
    • 删除
  • 分支
    • 创建分支
    • 切换分支
    • 删除分支
    • 合并分支
    • 合并冲突
    • 合并模式
    • bug分支
    • 删除临时分支

git安装-Centos

sudo yum -y install git #直接安装git即可

基本操作

git init

🚀仓库是进行版本控制的一个文件目录,创建一个普通目录后进入到此目录中,使用git init操作,表示让git管理此目录。

git init之前:

在这里插入图片描述

git init之后:

在这里插入图片描述

git config

🚀在安装完git后,首先要做的事情就是配置用户名称和email地址,可以使用以下命令进行配置。

git config [--global] user.name "用户名称"
git config [--global] user.email "邮箱地址"
git config -l  #使用此命令可以查看config配置信息
--global #此选项是一个可选项,如果使用此选项表示在该机器上的所有git仓库都使用该配置

例如:
在这里插入图片描述

git config --unset user.name # --unset可以用于删除对应的配置,但是不能删除全局的配置信息

在这里插入图片描述

工作区和版本库

在这里插入图片描述

工作区

🚀工作区就是在电脑上你要写代码或者文件的目录。

暂存区/索引

🚀暂存区一般存放在.git目录下的index文件中,我们把暂存区有时也叫做索引。

版本库

🚀工作区有一个隐藏的.git目录,它不算工作区,它是git的版本库。这个版本库里面的所有文件都被git管理起来,每个文件的修改,删除,git都能追踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以恢复到之前的版本。

上图中,体现了三者工作区,暂存区,版本库之间的关系。

添加文件—场景一

🚀不能手动将工作区的文件手动添加到版本库中,在工作区进行修改(增加,删除,修改)操作后可以通过add添加到版本库的暂存区中。

例如:在工作区内创建一个文件test1.txt
在这里插入图片描述

git status

通过git status 查看仓库的状态
在这里插入图片描述

这段话的意思就是在工作区中的test1.txt文件没有被git追踪管理,可以使用git add将其添加到暂存区中。

git add test1.txt //将test1.txt添加到暂存区中
git commit -m"add test1.txt" //将test1.txt添加到版本库

git log

🚀可以通过git log来查看历史提交记录:

git log

在这里插入图片描述

git log --pretty=oneline //漂亮的显示

在这里插入图片描述

查看.git目录结构

在这里插入图片描述

  • HEAD:默认存放的是指向master分支的指针
    在这里插入图片描述

  • index:暂存区,就是将add的内容添加到这里
    🚀可以使用git ls-files -s查看暂存区中的内容:
    在这里插入图片描述
    注意:在暂存区和分支上存储的都是git对象的索引,git对象的本体存放在objects中,所以暂存区和分支都是比较轻量的。

  • refs/heads/master:保存的最新一次的commit id
    在这里插入图片描述

  • objects:在版本库中维护的对象库
    🚀针对每次修改,都会将每次修改写入到一个git对象中,而git对象是存放在对象库(objects)中的。
    🚀查看objects目录下的内容:
    在这里插入图片描述
    要想查看某个git对象,首先将此git对象的id分成两部分,前两个字符表示其存放的目录,后38个字符表示其存放的文件。可以查看以下最新提交的commit id 对应的git对象中的内容:
    使用git cat-file -p id号来根据id查看内容
    在这里插入图片描述
    以上就是最新一次提交对应的git对象中的内容。可以看到tree选项后面跟的也是一个git对象的id,可以查看一下其中的内容:
    在这里插入图片描述
    可以看到这个对象中存放的是关于修改test1.txt文件形成的git对象的id,顺便看一下这个git 对象中的内容存放的是什么:
    在这里插入图片描述
    可以看到这个git对象中存放的内容就是对test1.txt文件修改的内容。并且,无论是哪个git对象都是存放在objects目录下的。

添加文件—场景二

touch test2.txt
git add .
touch test3.txt
git commit -m"second commit"
[master 7a19ee2] second commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test2.txt

🚀可以看到,明明在工作区中创建了两个文件,但是在commit后的提示中显示只有1个change。其实也不难理解,因为commit操作是将暂存区的内容提交到分支中,上述操作中在commit之前只将test2.txt添加到了暂存区中,所以结果只有1个change。对于test3.txt可以先add到暂存区在commit到分支上。

在这里插入图片描述

修改文件

🚀修改是什么意思呢?对于一个文件新增一些数据,删除一些数据,修改一些数据都代表修改文件,git追踪管理的是一个个修改而不是文件。

在这里插入图片描述
🚀比如我们在开发一个项目,在工作区中写了好几天的代码,我们忘记了具体修改了哪些内容,可以使用 git diff 文件名来查看工作区与暂存区这一文件内容的区别。

在这里插入图片描述

git diif 展示的结果是一种diff格式:
—a/ 表示修改前的文件名
+++b/ 表示修改后的文件名
-1 +1,3其中-1表示:显示修改前的第一行数据,+1,3表示显示修改后的从第一行开始连续三行的数据。

git diff HEAD -- file查看版本库和工作区文件的区别:
在这里插入图片描述

版本回退

git reset命令用于版本的回退操作,本质是对版本库中的内容做回退。

git reset [--soft | --mixed | --hard] [HEAD]
HEAD说明:
HEAD表示当前版本
HEAD^表示上一个版本
HEAD^^表示上两个版本
依次类推......
也可以使用~数字表示:
HEAD~0表示当前版本
HEAD~1表示上一个版本
HEAD~2表示上两个版本
依次类推......
  • –sort:只回退版本库的内容

  • –mixed:回退暂存区和版本库的内容(默认选项)
    在这里插入图片描述
    🚀例如,将modify test1这个版本使用–mixed选项回退到add test3版本:
    在这里插入图片描述
    此时在工作区中应该是test1.txt的最新版本,暂存区和版本库中不是test1.txt的最新版本
    在这里插入图片描述
    回退到最新版本
    在这里插入图片描述

  • –hard:回退所有区域的内容
    在这里插入图片描述
    在这里插入图片描述
    🚀表示退回到上一个版本,可以看到上述提示HEAD已经指向了add test3.txt这一commit id。再次查看git log发现最新次提交的commit id都不见了。
    在这里插入图片描述
    如果要想再次回到modify test1.txt这个版本该如何操作呢?使用git log已经查不到这次的commit id 了
    git reflog指令,记录了本地的每一次提交
    在这里插入图片描述
    在这里插入图片描述
    🚀可以看到又恢复到了modify test1.txt这个版本了。
    在这里插入图片描述

撤销修改

场景一只有工作区有code

  • 🚀方法一:手动删除修改的代码。
  • 🚀方法二:使用git checkout -- file指令进行工作区代码的回退。
    例如:在test1.txt中新增一条数据,并且不提交到暂存区。
    在这里插入图片描述
    在这里插入图片描述
    使用git checkout -- test1.txt进行撤销操作
    在这里插入图片描述

工作区和暂存区有code

  • 🚀方法:使用git reset --mixed HEAD file回退版本库和暂存区到当前版本,然后使用git checkout -- file撤销工作区的修改。
    例如:在test1.txt中增加一条数据,并且add到暂存区:
    在这里插入图片描述
    在这里插入图片描述
    git reset --mixed HEAD 回退暂存区和版本库到当前版本。
    在这里插入图片描述
    git checkout -- test1.txt撤销工作区对test1.txt的修改。
    在这里插入图片描述

所有区域都有code并且没有push到远程仓库

  • 🚀方法一:git reset --hard HEAD^回退到上一个版本
  • 🚀方法二:git reset --soft HEAD^将版本库回退到上一个版本,这样就转化为商议种情况了
  • 🚀方法三:git reset --mixed HEAD^将版本库和暂存区回退到上一个版本,这样就转化为第一种情况了。

删除

[guoye@alicloud gitcode]$ ls
test1.txt  test2.txt  test3.txt
[guoye@alicloud gitcode]$ rm -f test2.txt 

🚀删除文件后会出现两种情况:

  • 确实想删除此文件,但是没有删除干净,因为暂存区和版本库中还保存着此文件的信息。
    git rm test2.txt将test2.txt在暂存区中删除,然后commit提交到版本库中即可。
git rm test2.txt
git commit -m"rm test2.txt"
  • 不小心误删除了此文件。
    撤销工作区的修改即可,git checkout -- test2.txt
    git rm = rm + add

分支

创建分支

  • 🚀git branch查看分支:
    在这里插入图片描述
  • 🚀git branch dev1创建名为dev1的从分支
    在这里插入图片描述
    *代表当前的工作分支,也就是HEAD指针指向的分支

切换分支

  • git checkout 分支名
    例如,切换到刚刚创建的dev1分支
    在这里插入图片描述
  • 创建并切换分支,git checkout -b dev2,创建名为dev2的分支,并切换到dev2分支上。
    在这里插入图片描述
    🚀在分支dev2上向test3.txt文件中写入一些内容,然后提交到版本库。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

删除分支

  • 使用git branch -d dev注意的是不能在工作分支为dev分支时去删除dev分支。
    在这里插入图片描述
    在这里插入图片描述

合并分支

🚀git merge dev将名为dev的分支合并到当前的工作分支。

在这里插入图片描述
例如:将dev2分支合并到master分支上。
在这里插入图片描述

可以看到,已经成功的将dev2分支合并到了master分支上。在master分支上可以看到在dev2分支上对test3.txt文件修改的内容。

合并冲突

🚀但是并非所有情况都可以像上述情况一样可以直接合并,有时会出现合并冲突的情况。
例如:
1.创建一个新的分支dev4
2.在master上修改test3.txt文件的内容
3.在dev4上修改test3.txt的文件内容
4.合并dev4到master分支

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看到此时会出现合并冲突。此时查看test3.txt文件的内容:

在这里插入图片描述

此时我们必须要⼿动调整冲突代码,并需要再次提交修正后的结果!!(再次提交很重要,切勿忘记)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

合并模式

  • ff模式(fast-forward):
    在这里插入图片描述

在这里插入图片描述
像这样的合并就是ff模式的合并,但是这样会存在一个问题:就是当把dev2分支删除后,我们无法辨认最新的这次提交是通过merger得来的,还是通过在master修改得到的。所以不推荐使用ff模式合并分支

  • no-ff模式:这种模式下就会在merge下生成一个新的commit,这样从分支的历史上就可以看出分支的信息了。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    git log --graph --pretty=oneline --abbrev-commit 打印分支的图示信息
    在这里插入图片描述
    在这里插入图片描述

可以看到删除dev分支后仍然能够看出最新一次提交是通过merge得到的。

bug分支

🚀我们要在dev分支上进行开发,但是开发到一半的时候,突然发现master分支上的代码有bug,而解决次bug通常会创建新的分支去解决,但是dev分支上的代码还没有提交,要怎么办呢?

  • 在dev分支上 使用git stash命令,可以将当前工作区的信息进行储藏,被储藏的内容可以在某个时间恢复出来。
    在这里插入图片描述

  • 创建fix_dev去解决master分支上的bug。
    在这里插入图片描述

  • 将fix_dev分支合并到master分支上。
    在这里插入图片描述

  • 将master分支合并到dev分支
    在这里插入图片描述

  • 回到dev上,将之前的储藏的工作区内容进行恢复然后继续开发
    可以使用git stash list 查看之前储存的内容
    在这里插入图片描述
    使用git stash pop进行恢复,同时将储存的内容删除,也可以使用git stash apply进行恢复然后使用git stash drop进行删除
    在这里插入图片描述

  • 合并dev分支到master分支

  • 删除掉fix_dev分支

最后查看一下分支的图形信息:

在这里插入图片描述

删除临时分支

🚀某个新创建的分支在没有合并之前,使用git branch -d 分支名是删除不掉的。
在这里插入图片描述
可以使用git branch -D dev强制删除dev分支

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实体店做商城小程序如何

互联网电商深入各个行业,传统线下店商家无论产品销售还是服务业,仅靠以往的经营模式,很难拓展到客户,老客流失严重,同时渠道单一,无法实现外地客户购物及线上客户赋能等。 入驻第三方平台有优势但也有不足…

大数据采集技术与预处理学习一:大数据概念、数据预处理、网络数据采集

目录 大数据概念: 1.数据采集过程中会采集哪些类型的数据? 2.非结构化数据采集的特点是什么? 3.请阐述传统的数据采集与大数据采集的区别? ​​​​​​​ ​​​​​​​4.大数据采集的数据源有哪些?针对不同的数…

理解V3中的proxy和reflect

现有如下面试题 结合GeexCode和Gpt // 这个函数名为onWatch,接受三个参数obj、setBind和getlogger。 // obj是需要进行监视的对象。 // setBind是一个回调函数,用于在设置属性时进行绑定操作。 // getlogger是一个回调函数,用于在获取属性时…

C# 压缩图片

.net下跨平台图像处理 https://github.com/mono/SkiaSharp 安装包 skiasharp 效果 代码 ImageCompression.cs using SkiaSharp;namespace ImageCompressStu01 {/// <summary>/// 图片压缩/// </summary>public class ImageCompression{/// <summary>/…

在spring boot+vue项目中@CrossOrigin 配置了允许跨域但是依然报错跨域,解决跨域请求的一次残酷经历

首先&#xff0c;说一下我们的项目情况&#xff0c;我们项目中后端有一个过滤器&#xff0c;如果必须要登录的接口路径会被拦下来检查&#xff0c;前端要传一个token&#xff0c;然后后端根据这个token来判断redis中这个用户是否已经登录。 if (request.getMethod().equals(&qu…

深入了解 Elasticsearch 8.1 中的 Script 使用

一、什么是 Elasticsearch Script&#xff1f; Elasticsearch 中的 Script 是一种灵活的方式&#xff0c;允许用户在查询、聚合和更新文档时执行自定义的脚本。这些脚本可以用来动态计算字段值、修改查询行为、执行复杂的条件逻辑等等。 二、支持的脚本语言有哪些 支持多种脚本…

数据分享 I 地级市人口和土地使用面积基本情况

数据地址&#xff1a; 地级市人口和土地使用面积基本情况https://www.xcitybox.com/datamarketview/#/Productpage?id394 基本信息. 数据名称: 地级市人口和土地使用面积基本情况 数据格式: ShpExcel 数据时间: 2021年 数据几何类型: 面 数据坐标系: WGS84坐标系 数据…

oracle19c配置驱动

1.遇到的问题 下载jar包 https://www.oracle.com/database/technologies/appdev/jdbc-ucp-19c-downloads.html 执行命令 mvn install:install-file -DgroupIdcom.oracle -DartifactIdojdbc19 -Dversion19.3.0.0 -Dpackagingjar -Dfileojdbc8.jar2.配置驱动 # 数据源配置 data…

lua-web-utils和proxy设置示例

以下是一个使用lua-web-utils和proxy的下载器程序&#xff1a; -- 首先安装lua-web-utils库 local lwu require "lwu" ​ -- 获取服务器 local function get_proxy()local proxy_url "duoipget_proxy"local resp, code, headers, err lwu.fetch(proxy_…

基于jquery+html开发的json格式校验工具

json简介 JSON是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;但是也使用了类似于C语言家族…

Django分页功能的使用和自定义分装

1. 在settings中进行注册 # drf配置 REST_FRAMEWORK {DEFAULT_AUTHENTICATION_CLASSES: (# rest_framework_jwt.authentication.JSONWebTokenAuthentication,rest_framework_simplejwt.authentication.JWTAuthentication,rest_framework.authentication.SessionAuthenticatio…

【Opencv4快速入门】轮廓检测findContours

7.2 轮廓检测findContours 7.2.1 轮廓查找findContours7.2.2 轮廓绘制drawContours图像轮廓是指图像中对象的边界,是图像目标的外部特征,这个特征对于图像分析、目标识别和理解更深层次的含义具有重要的作用。 7.2.1 轮廓查找findContours 图像的轮廓补单能够提供物体的边缘,…

【ubuntu】 Linux(ubuntu)创建python的虚拟环境

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

protobuf对象与JSON相互转换

除了之前的 protobuf-java依赖之外&#xff0c;还需要引入 protobuf-java-uti 依赖&#xff1a; <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java --><dependency><groupId>com.google.protobuf</groupId><artifactId&…

数据结构和算法——用C语言实现所有排序算法

文章目录 前言排序算法的基本概念内部排序插入排序直接插入排序折半插入排序希尔排序 交换排序冒泡排序快速排序 选择排序简单选择排序堆排序 归并排序基数排序 外部排序多路归并败者树置换——选择排序最佳归并树 前言 本文所有代码均在仓库中&#xff0c;这是一个完整的由纯…

ICLR 2023丨3DSQA:3D 场景中的情景问答

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/pdf/2210.07474.pdf 主页链接&#xff1a;http://sqa3d.github.io 图 1&#xff1a;3D 场景中情景问答 (SQA3D) 的任务图示。给定场景上下文 S&#xff08;例如&#…

FileInputStream文件字节输入流

一.概念 以内存为基准&#xff0c;把磁盘文件中的数据以字节形式读入内存中 二.构造器 public FileInputStream(File file) public FileInputStream(String pathname) 这两个都是创建字节输入流管道与源文件接通 三.方法 public int read() :每次读取一个字节返回&#xff0c;如…

计算机网络基础二

课程目标 了解 OSI 七层模型分层结构 了解 TCP/IP 协议簇四层模型分层结构 能够说出 TCP/IP 协议簇中 运输层、网络层和数据链路 层常见的 相关协议 能够说出 TCP/IP 的三次握手四次断开过程 了解 Vmware 的三种网络模式 能够使用客户端工具连接虚拟机 掌握主机名、 DNS…

ArcGIS中批量mxd高版本转低版本

我们经常在给别人发ArcGIS的工程文件mxd&#xff0c;结果到别人那发现mxd工程文件打不开&#xff0c;原因是我们的arcgis版本高于别人&#xff0c;此时工程文件又很多&#xff0c;一个个转存成低版本又嫌麻烦&#xff0c;于是我们做了个批量mxd高版本转低版本的小工具&#xff…

淘宝API接口获取商品信息,订单管理,库存管理,数据分析

在淘宝开放平台中&#xff0c;每个API接口都有相应的文档说明和授权机制&#xff0c;以确保数据的安全性和可靠性。开发者可以根据自己的需求选择相应的API接口&#xff0c;并根据文档说明进行调用和使用。 淘宝开放平台API接口是一套REST方式的开放应用程序编程接口&…
最新文章