Git | Git基本命令

server/2024/9/20 7:08:19/ 标签: git, gitee, github

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_158">查看.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.ppmy.cn/server/22423.html

相关文章

如何基于Zookeeper实现注册中心模型?

在分布式系统中,通常会存在几十个甚至上百个服务,开发人员可能甚至都无法明确系统中到底有哪些服务正在运行。另一方面,我们很难同时确保所有服务都不出现问题,也很难保证当前的服务部署方式不做调整和优化。由于自动扩容、服务重…

C#基础之选择排序

选择排序 文章目录 选择排序1、概念2、代码实现 1、概念 1、新建一个下标 int index 0; 2、依次比较 3、找出极值 arr[index] < arr[n] 4、放入目标 //数组长度-1-n轮从第0轮开始 5、比较n轮2、代码实现 int[] arr new int[]{8,7,1,5,4,2,6,3,9}; 第一步 声明索引0&…

AI图书推荐:ChatGPT写论文的流程与策略

论文一直是任何学术学位的顶峰。它展示了学生在研究领域的兴趣和专业知识。撰写论文也是一个学习经验&#xff0c;为学术工作以及专业研究角色做好准备。但是&#xff0c;论文工作总是艰苦的&#xff0c;通常是充满乐趣和创造性的&#xff0c;但有时也是乏味和无聊的。生成式人…

django之select_related、prefetch_related

django中的ORM查询,针对复杂的查询,处理使用A.objects.filter(foreign_name__field)进行查询外。还可以使用select_related 和prefetch_related,进行性能的优化 select_related: 将会根据外键关系(注意: 仅限单对单和单对多关系),在执行查询语句的时候通过创建一条包含…

Web UI自动化测试--selenium其他使用方法

一、无头浏览器 应用场景: 无头的场景,一般先有头测试,再无头运行节省资源不关注正常的操作过程对错误的仍然可以截图示例: from selenium import webdrivermy_option =webdriver.ChromeOptions() my_option.add argument(-headless) driver= webdriverChrome(options=my…

Git 使用 下载分支 提交新项目到当前分支 三(公司快速上手版)

文章背景 git已经装好了&#xff0c;公司的也给创建好账户了&#xff0c;仓库地址也有了。 领导已经给你说了是哪个分支了。 如何下载远程仓库中的一个项目分支&#xff0c;到本地电脑上。 并且如何将新建的项目上传到当前分支的远程仓库 下载 步骤 创建文件夹。 右键 Op…

Django项目之图书管理系统

Django——图书管理系统 一、前期准备 1、创建好 Django 项目 2、准备好数据库 —— 创建数据库&#xff1a;book_system 3、配置项目中的数据库引擎 DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: book_system,HOST: 127.0.0.1,USER: root,PASSWORD: ro…

mysql全量备份及数据恢复实践

前置 myql&#xff1a;8.0.34 percona-xtrabackup&#xff1a;percona-xtrabackup-8.0.34-29 一、全量备份脚本 #!/bin/bash #删除历史 find /data/backups -mtime 10 -exec rm -rf {} \; #下载备份工具 #wget https://file.zjwlyy.cn/percona-xtrabackup-8.0.34-22.tar…

Ubuntu下vscode彻底卸载

参考步骤&#xff1a;大佬博客 1、 执行以下命令卸载 Visual Studio Code&#xff1a; sudo apt purge code2、删除 Visual Studio Code 的配置文件和缓存文件。这些文件通常位于用户的主目录下的 .config 和 .cache 目录中。你可以使用以下命令删除它们&#xff1a; rm -rf …

Gateway

序言 本文给大家介绍一下 Spring Cloud Gateway 的基础概念以及使用方式。 一、快速入门 1.1 引入依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://…

k8s如何写yaml文件

k8s&&如何写yaml文件 metadataspecresources: 如何设置request和limit&#xff1f; status metadata metadata: 通常用于填写一些对象&#xff08;如pod、deployment等&#xff09;的描述信息&#xff08;类似人的名字、年龄等&#xff09;。 spec spec: 通常代表着…

联软科技安全准入门户平台commondRetStr接口RCE漏洞复现[附POC]

文章目录 联软科技安全准入门户平台commondRetStr接口RCE漏洞复现[附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现联软科技安全准入门户平台commondRetStr接口RCE漏洞复现[附POC] 0x01 前言 免责声明:请勿利用文章内的…

http请求内容

Cookie 可以包含多个键值对&#xff0c;因此它不仅限于单个值。一个 Cookie 可以携带多个属性&#xff0c;每个属性由键值对表示 Set-Cookie: namevalue; expiresSat, 30 Apr 2022 23:59:59 GMT; path/; domain.example.com; secure; HttpOnly 在HTTP协议中&#xff0c;请求头之…

docker容器

一、docker容器操作 1.1 容器创建 将镜像加载到容器的过程。新创建的容器默认处于停止状态&#xff0c;不运行任何程序&#xff0c;需要在其中发起一个进程来启动容器。 格式&#xff1a;docker create [选项] 镜像 常用选项&#xff1a; -i容器开启标准输入-t让docker分配一个…

课时109:sed命令_基础实践_内容替换

2.1.2 内容替换 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 简介 sed的文本替换动作是使用频率最高的一种样式。它的基本表现样式如下&#xff1a;命令格式&#xff1a;sed -i [替换格式] [文件名]源数据 | sed -i [替换格式]注…

IDE 高效快捷键

代码编辑器要擅用重构Refactor、全局搜索、全局替换、窥视Peek、代码自动格式化Format&#xff0c;才能真正为开发提效&#xff01; Intellij Idea 的常用快捷键(同 WebStorm) 按键功能Ctrl N根据输入的 类名 查找类文件Ctrl Shift N根据输入的 名称 查找任意文件Ctrl R在…

Linux基本指令(2)

目录 mv指令&#xff1a; cat&#xff1a; more指令&#xff1a; less指令&#xff1a; head指令&#xff1a; tail指令&#xff1a; mv指令&#xff1a; 说明&#xff1a; mv命令是move的缩写&#xff0c;可以用来移动文件或者文件改名(move(rename)files),是linux系统下…

QT支持多种开发语言

QT主要是一个C应用程序框架&#xff0c;但它也提供了对其他一些编程语言的官方或非官方支持。以下是QT支持的一些语言版本及其特点。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.Python (PyQt) &#xff1a; PyQt是QT的官方Pyth…

APP广告变现,开发者对接百度广告联盟,广告变现收益如何?

百度广告联盟属于广告整合平台&#xff0c;类似的还有穿山甲、优量汇、快手联盟等。 百度广告联盟注册流程&#xff1a; 创建账户&#xff1a;填写用户基本信息&#xff0c;如&#xff1a;用户名、密码、邮箱、手机号&#xff1b; 完善财务信息&#xff1a;填写银行账号、开…

限流--4种经典限流算法讲解--单机限流和分布式限流的实现

为什么需要限流 系统的维护使用是需要成本的&#xff0c;用户可能使用科技疯狂刷量&#xff0c;消耗系统资源&#xff0c;出现额外的经济开销问题&#xff1a; 控制成本>限制用户的调用次数用户在短时间内疯狂使用&#xff0c;导致服务器资源被占满&#xff0c;其他用户无…