当前位置: 首页 > news >正文

GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件

GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件

文章目录

  • GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件
    • 前言
    • 一、安装git
    • 二、git基本操作
      • 2.1 初始化git
      • 2.2 配置局部生效
      • 2.3 配置全局生效
    • 三、认识工作区、暂存区、版本库
      • 3.1 添加文件场景一
      • 3.2 查看添加的文件
      • 3.3 添加文件场景二
    • 四、修改文件
      • 4.1 查看工作区的状态
    • 五、版本回退
    • 六、撤销修改
      • 6.1 情况一:对于工作区的代码,还没有add
      • 6.2 情况二:已经add ,但没有commit
      • 6.3 情况三:已经add ,并且也commit 了
    • 七、删除文件

前言

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

我们这里就不多介绍这里的GIT了,百度百科和维基百科上都有很多介绍,我们这里就不再介绍,直接来演示~~

下面演示的均是Centos7.6系统,

  • 我们先来检测以下git有没有安装
git --version
  • 如果提示的是这样的就说明没有安装

在这里插入图片描述

一、安装git

  • 执行以下命令,安装git
yum instal -y git
  • 如果执行失败的话就先更新一下系统
yum update -y
  • 然后再检测是否安装成功~

在这里插入图片描述


二、git基本操作

2.1 初始化git

  • 安装好git后,我们就要创建一个本地仓库,就是要初始化一下

创建文件夹

mkdir gitcode

进入文件夹

cd gitcode/

初始化git

git init

查看是否初始化成功

ls -al

在这里插入图片描述

  • 查看隐藏文件git目录下,有什么文件~~

在这里插入图片描述

  • 我们需要设置邮箱和用户名【这里是局部生效的配置用户名和邮箱】

2.2 配置局部生效

配置用户名

git config user.name "shilin"

配置邮箱

git config user.email "intshanxi@163.com"

查看配置

git config -l

在这里插入图片描述


那我想要删除刚刚配置的,就可以执行以下命令

删除用户名

git config --unset user.name

删除邮箱

git config --unset user.email

在这里插入图片描述

2.3 配置全局生效

  • 将配置项生效所有仓库配置项

配置用户名

git config --global user.name "intshanxi"

配置邮箱

git config --global user.email "intshanxi@163.com"

查看刚刚配置的

git config -l

在这里插入图片描述

  • 那我想要删除刚刚配置的,就可以执行以下命令~

删除用户名

git config --global --unset user.name

删除邮箱

git config --global --unset user.email
  • 接下来我们就往这个仓库里生成一个文件
touch ReadMe
  • 在目前情况下,git是不能管理这个文件的~~

在这里插入图片描述


  • 我现在往git里添加了一点东西

在这里插入图片描述


三、认识工作区、暂存区、版本库

3.1 添加文件场景一

  • 我们就来看第一个步骤
git add 文件名

或者只写一个.,这个意思就是全部添加

  • 我们就来看第二个步骤
git commit -m '要描述的细节'

在这里插入图片描述

  • 创建多个文件
touch file1 file2 file3
  • 我们还可以用.来一键添加

在这里插入图片描述

3.2 查看添加的文件

  • 还可以查看最近提交的日志
git log

在这里插入图片描述

  • 我们还可以再打印的简单一点,方便观察
git log --pretty=oneline

在这里插入图片描述

  • 查看git日志后,commit后面的一串字符是(安全哈希算法)加密过的文件

在这里插入图片描述

  • 我们可以通过命令来查看这个具体提交记录
git cat-file -p fc9176efe2397e38411e1ec44b9f58be6e0cc99f

在这里插入图片描述

  • 在其中有一行tree 0e6b1780b73cd9220ec5073dc64b42f7ad4bd945
  • 然后再查看一下这个
git cat-file -p 0e6b1780b73cd9220ec5073dc64b42f7ad4bd945
  • 继续查看文件内容
git cat-file -p 8d0e41234f24b6da002d962a26c2495ea16a425f

在这里插入图片描述

3.3 添加文件场景二

git add file4
touch file5
git commit -m 'add file4'
  • 这里虽然添加了两个文件,但是只有file4添加到了暂存区,提交修改的时候只有file4发生了变化,而file5没有发生变化

在这里插入图片描述

四、修改文件

  • git其实管理的是修改,而不是文件

  • 我们先修改了ReadMe

在这里插入图片描述

4.1 查看工作区的状态

  • 我们查看当前工作区的状态
git status

在这里插入图片描述

  • 那我们想查看修改了哪些内容呢?
git diff 文件名

在这里插入图片描述

  • 这个时候我们再提交一下
git add ReadMe
  • 查看状态
git status

在这里插入图片描述

  • 这个时候就再提交
git commit -m 'add modify ReadMe file'
  • 再查看
git status

在这里插入图片描述

五、版本回退

  • 刚开始文件里的内容只有一行,后来添加了两行

  • 对于这个文件来说是有两个版本的

在这里插入图片描述

  • 这里的回退命令是git reset可以指定某一次提交的版本

  • git reset 命令语法格式为: git reset [--soft | --mixed | --hard] [HEAD]

    • –mixed 为默认选项,使⽤时可以不用带该参数。该参数将暂存区的内容退回为指定提交版本内容,工作区文件保持不变。
    • –soft 参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
    • –hard 参数将暂存区与工作区都退回到指定版本。切记工作区有未提交的代码时不要用这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了,所以使用该参数前一定要慎重。
  • HEAD 说明:
    ◦ 可直接写成 commit id,表示指定退回的版本
    ◦ HEAD 表示当前版本
    ◦ HEAD^ 上一个版本
    ◦ HEAD^^ 上上一个版本
    ◦ 以此类推…

  • 可以使用 ~数字表示:
    ◦ HEAD~0 表示当前版本
    ◦ HEAD~1 上一个版本
    ◦ HEAD^2 上上一个版本
    ◦ 以此类推…


  • 查看日志
git log --pretty=oneline
  • 回退到最初版本
git reset --hard eea6e0091277b0e3de6739d0cede91333284b6e7

在这里插入图片描述

  • 可以看到一旦回到这一次,我们后面创建的文件都会被删除
  • 我们再来看文件的内容
cat ReadMe

在这里插入图片描述

  • 查看日志
git log --pretty=oneline

在这里插入图片描述

  • 那有人说我又后悔了怎么办?
  • 想要再回退回去
  • 我们刚刚打印过这一个最新的版本我们就回退到这个版本
git reset --hard b842e9f3f8a267b0957389abae0dbc159d12fd43

在这里插入图片描述

  • 我们再来看一下当前目录下
  • 文件回来了,文件里的内容也会来了

在这里插入图片描述

  • 再来打印这个日志
  • 这个log也回来了
git log --pretty=oneline

在这里插入图片描述

  • 那我回退了最初的版本后,找不到那个字符串了怎么办?
  • 我们还有一种方法

  • 查看
git reflog

在这里插入图片描述

  • 回退版本
git reset --hard b842e9f

在这里插入图片描述

  • 这样就可以回退回去了

  • 那么这里的版本回退为什么会这么快呢?
  • 是因为有一个HEAD指针

在这里插入图片描述

六、撤销修改

  • 如果我们在我们的工作区写了很长时间代码,越写越写不下去,觉得自己写的实在是垃圾,想恢复到上一个版本。

在这里插入图片描述

6.1 情况一:对于工作区的代码,还没有add

  • 我们先对ReadMe进行修改

在这里插入图片描述

  • 我们想撤销我们的代码,我们可以重新再次编辑删除掉那一行代码,就可以了

  • 那写了很多呢?想一次性撤销,那怎么办呢?接下来我们来看~~

  • 查看修改了哪些内容

git diff ReadMe

在这里插入图片描述

  • 想要一次撤销,我们执行以下命令
git checkout -- ReadMe
  • 这里的--就是回退到最近一次add或者commit的操作

  • 我们再次打印,新增的那一行就没有了

在这里插入图片描述

6.2 情况二:已经add ,但没有commit

  • add 后还是保存到了暂存区呢?怎么撤销呢?

在这里插入图片描述

  • 让我们来回忆一下学过的git reset回退命令,该命令如果使用 --mixed 参数,可以将暂存区的内容退回为指定的版本内容,但工作区文件保持不变。那我们就可以回退下暂存区的内容了!!!
git reset HEAD ReadMe
  • HEAD代表当前版本
  • HEAD^代表上一个版本
  • HEAD^^代表上一个版本

在这里插入图片描述

  • 这个时候再进行情况一的回退
git checkout -- ReadMe

在这里插入图片描述

6.3 情况三:已经add ,并且也commit 了

  • 我们可以git reset --hard HEAD^ 回退到上一个版本!不过,这是有条件的,就是你还没有把自己的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?我们后面章节会讲到远程版本库,一旦你推送到远程版本库,你就真的惨了

  • 我们先修改文件,然后添加文件【add】【commit】

  • 然后修改

git reset --hard HEAD^

在这里插入图片描述

七、删除文件

  • 删除文件
git rm file
git commit -m '记录'

在这里插入图片描述


我们这里的git基础操作就到这里了,我们后面还有一些进阶操作~~
感谢大家的收看,我们共同进步!!!

相关文章:

  • 操作系统 应用题 例题+参考答案(考研真题)
  • 【Ambari】HDFS基于Ambari的常规运维
  • 基于C#实现赫夫曼树
  • ②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]
  • Mysql并发时常见的死锁及解决方法
  • 【RTP】RTPSenderAudio::SendAudio
  • .Net6使用WebSocket与前端进行通信
  • C++类与对象(5)—流运算符重载、const、取地址
  • 通俗理解词向量模型,预训练模型,Transfomer,Bert和GPT的发展脉络和如何实践
  • 二叉树详讲(一)---完全二叉树、满二叉树、堆
  • Qt 串口编程-从入门到实战
  • flink的异常concurrent.TimeoutException: Heartbeat of TaskManager with id的解决
  • 河南省第五届“金盾信安杯”网络与数据安全大赛实操技能赛 部分wp(自己的一些思路和解析 )(主misc crypto )
  • 【华为OD】B\C卷真题 100%通过:字符串统计 C/C++实现
  • 记录一次因内存不足而导致hiveserver2和namenode进程宕机的排查
  • Apache Zeppelin在Apache Trafodion上的可视化
  • C++类中的特殊成员函数
  • Docker入门(二) - Dockerfile
  • es6
  • Java的Interrupt与线程中断
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • springMvc学习笔记(2)
  • Travix是如何部署应用程序到Kubernetes上的
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 阿里云前端周刊 - 第 26 期
  • 基于axios的vue插件,让http请求更简单
  • 如何选择开源的机器学习框架?
  • 软件开发学习的5大技巧,你知道吗?
  • 数据可视化之 Sankey 桑基图的实现
  • 通过npm或yarn自动生成vue组件
  • 微信小程序填坑清单
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​linux启动进程的方式
  • # C++之functional库用法整理
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $().each和$.each的区别
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (NSDate) 时间 (time )比较
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (二)windows配置JDK环境
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (四)图像的%2线性拉伸
  • (转)memcache、redis缓存
  • (转)Scala的“=”符号简介
  • (转)为C# Windows服务添加安装程序
  • ***通过什么方式***网吧
  • *Django中的Ajax 纯js的书写样式1
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .mysql secret在哪_MySQL如何使用索引
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET 表达式计算:Expression Evaluator
  • .NET 常见的偏门问题
  • .NET 的静态构造函数是否线程安全?答案是肯定的!