Git | Git基本命令

news2024/11/15 17:35:59

Git | Git基本操作

文章目录

  • Git | Git基本操作
    • 一、创建Git本地仓库
      • 1、创建Git仓库
      • 2、配置Git
      • 3、理解工作区、暂存区、版本库关系
    • 二、添加、修改与查看
      • 添加文件
        • 查看历史提交记录
      • 修改文件
      • 查看.git文件
    • 三、版本回退
      • 版本回退
      • 撤销修改
        • 尚未add
        • 已add但还未commit
        • 已add并commit
      • 删除文件

一、创建Git本地仓库

仓库本质上是对版本控制的一个文件目录,想对文件进行版本控制,所以需要先创建一个仓库出来。

而拿到一个Git本地仓库,我们必须要对它进行配置,才方便之后与远程仓库链接

那我们创建的这个Git本地仓库里边有哪些区域,每个区域又起着什么样的作用呢?

这便是我们接下来要解决的三个小问题

1、创建Git仓库

  1. 准备工作:先创建一个文件夹,在这个路径下创建仓库。这里我选择在root目录下创建一个gitcode文件夹,专门用于存放git相关的练习代码

    mkdir gitcode

  2. 切换到gitcode目录下

    cd gitcode/

  3. 创建git本地仓库

    git init

  4. 检查gitcode目录下是否多了.git文件夹

    ll -a

    当目录下多了.git的隐藏文件,就算创建成功了

在这里插入图片描述

特别注意:.git目录及文件不要手动修改!!!因为这个文件是用来跟踪管理仓库的,一旦改乱,整个Git仓库可能就报废掉,甚至远程的仓库也会乱掉。

2、配置Git

这里的配置主要是配置我们的用户名和邮箱,方便之后和远程仓库链接的。

  1. 首先确定自己gitee/github上边的用户名和邮箱,这里以git为例:在这里插入图片描述

  2. 配置:进入gitcode目录下,输入下边两条命令[以张三为例,具体配置时需要设置成自己的信息]:
    git config --global user.name "zhangsan"

    git config --global user.email "123@example.com"

    其中,这里的–global是可选的参数。因为一个主机上其实可以有多个本地仓库,每个仓库可以配置不同,这里我没有配置不同信息的需求,所以这里全部设置成了同一个用户的信息。初学时或者没有特别需求,建议先用上

    如果不要这个选项,也可以,那时执行命令时必须在对应的仓库内。

  3. 检查是否配置成功

    git config -l

在这里插入图片描述

补充如配置失误,需要删除重新配置,删除命令:

git config --global --unset user.name

git config --global --unset user.email

在这里插入图片描述

与配置相对应的,这里的–global也是可选参数,当配置时使用此参数,若想要删除,也必须带上这个参数。

这里我们演示完,还重新配置上,进行后边的操作在这里插入图片描述

3、理解工作区、暂存区、版本库关系

对于Git仓库,一般划分为几个区域理解,一是远程仓库,而是本地仓库。其中本地仓库又有工作区、暂存区和版本库的概念。

在这里插入图片描述

  1. 工作区:即我们编写代码/文件的目录,对应这里gitcode就是我们的工作区。
  2. 暂存区/索引:stage或index。在.git目录下的index文件中[.git/index]。
  3. 版本库:repository。本地仓库中的.git文件其实不算工作区而是版本库,这个版本库中所有文件可以被Git管理和追踪,在某个时刻进行还原。

在版本库中,每从工作区中add一次,就会生成一个git对象,并写入到对象库中,在暂存区中存的是git对象的索引,Git通过对git对象的维护来维护文件的版本

版本库中的HEAD指针存的也是对象索引,它指向master分支

工作区中的内容只有经过add和commit两步操作之后才算真正意义上写入了版本库中

二、添加、修改与查看

创建好了本地仓库,接下来尝试向版本库中添加内容。[0–>1]

之后,在工作区修改内容再提交修改[1–>2]

最后,基于上述操作,查看.git文件并尝试解释重要文件的含义。

添加文件

  1. 准备工作:首先创建文件ReadMe,并使用vim命令进行编写

    创建文件:touch ReadMe

    编辑文件:vim ReadMe

    ​ 按下I键[切换成插入模式],输入hello,git,点击esc,输入:wq[保存并退出],

  2. 通过add操作加入暂存区:

    git add .或者git add 文件名1 ... 文件名n

    其中.是添加所有修改到暂存区,后者则是只添加指定的文件。

    这里我用的是git add ReadMe

  3. 通过commit操作将文件提交到版本库:

    commit操作这里也有两种:

    1. 提交暂存区所有内容:git commit -m “提交细节”
    2. 提交暂存区指定内容:git commit [file1] …[file2] -m “message”

    这里我采用的是第一种git commit -m "add first file"

在这里插入图片描述

查看历史提交记录

命令:git log

以一行的形式进行打印:git log --pretty=oneline

一般来说,会用第二个。

修改文件

假设我们需要在ReadMe中追加一行内容:hello,world【增删改都是修改操作】

清屏操作:ctrl+L或者直接输入clear
在这里插入图片描述

修改成功后,我们添加并提交在这里插入图片描述

我们也可以再查看日志进行检验在这里插入图片描述

查看.git文件

在gitcode文件夹下,输入tree .git/命令:

目前来说,我们只关注HEAD、index、objects、refs、master几个部分即可,下边逐一解释。

在这里插入图片描述

  1. HEAD

    是一个指向当前分支的指针

    对于它,我们可以通过cat .git/HEAD查看

在这里插入图片描述

在这里我们会发现,它指向master分支,与我们之前说的一致。

那么master下又是什么

  1. master分支 && refs/heads/master

    refs/heads/master中保存了当前master分支的最新commit id

    同样通过cat命令查看cat .git/refs/heads/master

在这里插入图片描述

这里我们会发现它存了一个字符串,这里其实就是我们每次提交的commit id也就是版本号。

它不是递增的数字,而是通过安全哈希(SHA1)算出来的一个16进制数字。

仔细看上边的图,会发现,这里查出来的内容,与objects中第三个分支相同,我们再去看看objects

  1. objects

    我们之前已经说过,objects中存放的是git对象的索引,是具体每次修改的信息。它维护了所有修改

    这个字符串是由两部分组成,前边两位和后边的部分。

    根据刚刚查出来的commit id,我们可以查看对应的修改:命令为git cat-file -p commitid

在这里插入图片描述

会发现这里与我们之前打印的日志是一样的

  1. index

    这里我们发现index中没有东西,也就是暂存库中没有,我们试着向暂存库中添加:

    touch file1 file2

    git add .

    并再次查看git目录

    暂存区,git add后会更新内容

事实上,我们可以创建除master之外的分支,如果切换到对应的分支上,那么HEAD指针就会指向对应的分支,但默认情况下HEAD还是指向master的

三、版本回退

版本回退

git reset [--soft | --mixed --hard] [HEAD]

参数说明:soft、mixed、hard是回退的模式,HEAD是回退的版本

  1. –soft:将版本库回退到特定版本,修改内容存在于工作区和暂存区
  2. –mixed:默认模式,将暂存区和版本库回退到指定版本,修改内容只在工作区中存在
  3. –hard:将本地、暂存库和版本库中所有内容都回退到指定版本
  4. HEAD:HEAD/HEAD0是当前版本,HEAD^/HEAD1是上个版本,HEAD^^/HEAD~2是上上个版本,这里也可以直接写commitid,其中commit id支持部分检索,可以只要前边的

下边针对hard模式进行测试:

  1. 准备工作:准备三个版本的ReadMe——修改三次:

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

  1. 工作区从v3回退到v2:希望从v2开始编写

    git reset --hard v2的commitid
    在这里插入图片描述

补充:从v3回退到v2时,可能有这种情况——我又想回退到v3

对于这种情况,我们有下边的解决方案

  1. git reflog:记录本地每一次命令,此时如果找到v3的版本号,用hard模式回退就好。

在这里插入图片描述

通过这次操作,我们也可以发现,git进行版本回退的时候,可以使用部分commitid进行

  1. 需要说明的是,因为实际开发中版本提交可能过多,找不到,所以即使有上边的方法也存在一定的风险

撤销修改

注意:撤销修改的前提是还没有将版本库中的代码push到远程仓库上!

撤销操作存在三种情况:只在工作区的、已在暂存区但没在版本库、已在版本库了

尚未add

比如,对于工作区中ReadMe文件,我们进行了修改并保存了,还未进行add,commit操作,但是发现有错误,需要删除当前版本的更改重新修改,对应的解决办法就有下边三种:

  1. 直接删掉
  2. 通过git diff ReadMe查看差异,进行对应修改
  3. 通过git checkout -- ReadMe让文件回到最近一次add/commit状态。注意中间的–不能省略,不然就是其他含义,分支管理那里我们再谈。
已add但还未commit

这里我们可以通过:git reset HEAD ReadMe

已add并commit

git reset --hard HEAD^

删除文件

说明:这里的删除文件是指删除版本库中的内容

例如这里我们想要删除file2,那么有

  1. rm file2
  2. git status查看工作区中文件的修改
  3. git add file2:将file2的修改情况加入暂存区
  4. git commit -m "delete file2":提交file2的删除信息

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

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

相关文章

项目小游戏-贪吃蛇

目录 1.游戏开始 - GameStart 1.1cmd命令窗口 调节窗口命令 ​编辑更改窗口命名 ​编辑 1.2 Win32 API win32 API 的介绍: ​编辑 获取控制台坐标COORD 获取控制台句柄: 获取缓冲台光标信息: 获取虚拟键位: 本地初始化 setlocale(); 游戏开始的具体实现&#xff1a…

uniapp中scroll-view初始化的时候 无法横向滚动到某个为止

项目需求 实现日历&#xff08;13天&#xff09;默认高亮第六天 并定位到第六 左边右边各六天&#xff08;可以滑动&#xff09; 直接上代码 <template><scroll-view class"scroll-X":show-scrollbar"true" :scroll-x"scrollable":…

理解这几个安全漏洞,你也能做安全测试!

如今安全问题显得越来越重要&#xff0c;一个大型的互联网站点&#xff0c;你如果每天查看日志&#xff0c;会发现有很多尝试攻击性的脚本。 如果没有&#xff0c;证明网站影响力还不够大。信息一体化的背后深藏着各类安全隐患&#xff0c;例如由于开发人员的不严谨导致为Web应…

八字入门书介绍

《千里命稿》&#xff0c;此书是民国时期上海的韦千里先生所著&#xff0c;是他主讲的命学培训班的讲义&#xff0c;成书时间在1935年。该书语言简练、述理清晰&#xff0c;是讲述子平命学概念的佼佼者&#xff0c;尤其是对五行、六神的性质讲解&#xff0c;可以说是此书的精华…

xpath的使用以及原理-元素定位

# 查找文本框输入文本 driver.find_element(By.CLASS_NAME,"nav-search-input").send_keys("i_cecream查找到了") #查找到之后点击 driver.find_element(By.CLASS_NAME,"nav-search-btn").click()time.sleep(30)selenium4的解析。 client调用se…

Elasticsearch进阶篇(三):ik分词器的使用与项目应用

ik分词器的使用 一、下载并安装1.1 已有作者编译后的包文件1.2 只有源代码的版本1.3 安装ik分词插件 二、ik分词器的模式2.1 ik_smart演示2.2 ik_max_word演示2.3 standard演示 三、ik分词器在项目中的使用四、ik配置文件4.1 配置文件的说明4.2 自定义词库 五、参考链接 一、下…

动态内存的管理

1.为什么要有动态数组呢 int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间 上述开辟空间的方式有两个特点&#xff1a; 空间开辟大小是固定的数组在申明的时候&#xff0c;必须指定数组的长度&#xff0c;数组空间一旦确定了大小…

【AI自媒体制作】【AI工具】天工AI

链接&#xff1a;天工AI 目前chatgpt3.5已经免费&#xff0c;很多AI平台都可以进行一定层度的白嫖&#xff0c;对于个人开发者是一件好事&#xff0c;有些会员就没必要充值了。 天工AI是比较常见的AI工具了&#xff0c;可以识别图片、智能问答、生成图片等。当然对于一个程序员…

关于电商独立站搭建中电商API数据采集接口的应用

搭建供应链系统时&#xff0c;您可能需要与电商平台进行集成&#xff0c;以实现订单管理、库存同步、物流跟踪等功能。以下是一些常见的电商接口&#xff0c;可以帮助您构建供应链系统&#xff1a; 1. **淘宝开放平台接口**&#xff1a;淘宝开放平台提供了丰富的接口&#xff…

上位机图像处理和嵌入式模块部署(树莓派4b和驱动的编写)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 树莓派4b上面还支持驱动代码的编写&#xff0c;这是我没有想到的。这里驱动&#xff0c;更多的是一种框架的编写&#xff0c;不一定是编写真正的驱…

Selenium web自动化测试环境搭建

Selenium web自动化环境搭建主要要经历以下几个步骤&#xff1a; 1、安装python 在python官网&#xff1a;Welcome to Python.org&#xff0c;根据各自对应平台如&#xff1a;windows&#xff0c;下载相应的python版本。 ​ 下载成功后&#xff0c;点击安装包&#xff0c;一直…

排序之插入排序:从斗地主到插入排序

目录 1.斗地主如何摸牌 2.从摸牌想到插入排序 3.完成插入排序 4.结束语 1.斗地主如何摸牌 不知道各位是否玩过几乎人人都玩过的斗地主游戏呢&#xff1f;相必各位或多或少都玩过一点&#xff0c;再没玩过也看别人打过。今天博主就将从这个游戏为大家讲解我们的插入排序。 在…

shell编写

运算符 echo 打印 unset 删除 [ boolean表达式 ] 注意中括号中有两个空格&#xff0c;两个空格中添加表达式 0为true 1为false $?查看结果 -ge 大于等于 lt小于 le小于等于 eq等于 ne不等于 格式& | [ 表达式 ] -o是或者or的意思 -a是and的意思 &#xff01…

访问学者申请的成功经验

在申请成为访问学者时&#xff0c;经验是至关重要的。下面知识人网小编将介绍一些可以帮助您成功申请的经验和技巧。 首先&#xff0c;了解目标机构或大学的研究方向和需求是非常重要的。在申请之前&#xff0c;仔细研究该机构的学术项目、研究成果以及教授的专业领域&#xff…

kaggle 泰坦尼克号2 得分0.7799

流程 导入所要使用的包引入kaggle的数据集csv文件查看数据集有无空值填充这些空值提取特征分离训练集和测试集调用模型 导入需要的包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarni…

Redis 逻辑过期策略设计思路

引言&#xff1a; 当我们平常使用Redis缓存的时候&#xff0c;会出现一种场景&#xff0c; redis的key到过期时间了&#xff0c;总是需要到数据库里面去查一遍数据再set回redis&#xff0c;这个时候如果数据库响应比较慢&#xff0c;那么就会造成用户等待&#xff0c;如果刚好…

python爬虫小案例——汽车之家

本篇文章是使用bs4中的BeautifulSoup和requests解析网页和获取数据&#x1f451;&#x1f31f; 文章目录 &#x1f31f;前言一、&#x1f349;bs4中的BeautifulSoup二、&#x1f349;bs4的语法三、&#x1f349;内容实践1. 确定想要爬取的内容2. 分析网页3. 获取数据分析 &…

【ThinkPHP框架教程·Part-02】开发规范和目录结构

文章目录 一、开发规范1、目录和文件的规范2、函数和类、属性命名规范3、常量与配置的规范4、数据表和字段的规范 二、目录结构1、单应用模式目录结构图&#xff08;默认&#xff09;2、多应用模式目录结构图&#xff08;自定义&#xff09;3、仅允许public目录对外访问4、其他…

软考141-上午题-【软件工程】-杂题+小结

一、杂题 真题1&#xff1a; 真题2&#xff1a; 真题3&#xff1a; 真题4&#xff1a; 真题5&#xff1a; 真题6&#xff1a; 真题7&#xff1a; 真题8&#xff1a; 真题9&#xff1a; 真题10&#xff1a; 真题11&#xff1a; 真题12&#xff1a; 真题13&#xff1a; 真题14&a…

4.20 IO流

IO流结构 InputStream&#xff08;字节输入流&#xff09; public static void main(String[] args) {// byteInputStream();// byteInputStream1();// byteInputStream2();byteInputStream3();}// 使用字节流时对于中文汉字基本都会出现乱码问题&#xff0c;因此对中文乱码问…