git学习【持续更新中。。。】

news2024/12/23 21:01:27

git学习【持续更新中。。。】

文章目录

  • git学习【持续更新中。。。】
    • 一、Git基本操作
      • 1.创建本地仓库
      • 2.配置本地仓库
        • 1.局部配置
        • 2.全局配置
      • 3.认识工作区、暂存区、版本库
      • 4.添加文件
      • 5.修改文件
      • 6.版本回退
      • 7.撤销修改
      • 8.删除文件
      • 9.理解分支
      • 10.创建、切换、合并分支
      • 11.删除分支
      • 12.合并冲突

一、Git基本操作

1.创建本地仓库

mkdir gitcode
cd gitcode
git init  #初始化

image-20240917165451711

image-20240917165642779

2.配置本地仓库

git 配置项 name,email
git config user.name "ljh"
git config user.email "123123@qq.com"
git config -l # 查看配置项
git config --unset user.name # 删除配置项
git config --global user.name "ljh"
# 生效于所有的git仓库 因为往往我们的服务器上有很多git仓库

# 注意不能直接重置
git config --global --unset user.name
1.局部配置

image-20240917171140901

image-20240917171243744

2.全局配置

image-20240917171446073

3.认识工作区、暂存区、版本库

​ 我们在gitcode目录下,创建一个文件,命名为ReadMe

image-20240917205413053

​ 目前情况下,Git能否管理ReadMe文件呢?是不行的!!这里这个.git 称为版本库(仓库),ReadMe称为工作区,图示如下:

image-20240917210658560

​ stage叫做暂存区/索引,也可以称为index

​ 对工作区的修改包括:新增、修改、删除

​ 在我们的版本库中存在一个objects区域:我们修改的工作区的内容会写入对象库的git对象中。

​ stage和master中存的都是索引,objects中存的才是对象。

image-20240917210817754

​ 注意:.git目录是不支持在该目录下进行手动修改的!!!

4.添加文件

git add ReadMe
git add . # 将当前目录下所有文件添加到暂存区
git commit -m "add first file" # 本次提交的细节信息
git log # 查看提交日志
# commit: 哈希计算的数字,十六进制
# Author:ljh <....qq.com>
# Date: 
# add first file
git log --pretty=oneline # 仅打印一行log

image-20240917211807751

cat .git/HEAD # ref:refs/heads/master
cat ./git/refs/head/master # 最新一次提交的commit号

image-20240917212453515

我们的commit号:前两位:文件号 后面:文件标识

image-20240917212816479

git cat-file -p commit号
# tree: 所有的commit
# parent: 上一次提交的commit号
# author
# committer: add 3 file commit的内容/更改的内容

image-20240917213158556

要记住!git追踪管理的其实是修改,而不是文件!

git status # 查看当前仓库的状态 哪些文件在工作区被修改了

image-20240917214506577

5.修改文件

如果要查看进行了哪些修改【查看暂存区和工作区文件的差异】

git diff ReadMe

image-20240917214553184

a/ :表示修改前 b/:表示修改后 根据上图可以发现 改动前后文件名没有变化

@@ -1 表示改动前一行 +1,2 表示改动后,连续两行

也可以 git diff HEAD - - [file] 查看版本库和工作区文件的区别

​ 总结:git status + git diff 的组合可以用来查看哪些内容发生了修改+修改了哪些内容

6.版本回退

​ 假如我们现在有两个版本的ReadMe,v1版本内容为git,v2版本内容为git world

git reset [ --soft | --mixed | --hard ] [HEAD]
# 本质是回退的版本库的内容,还可以回退到当前版本
工作区暂存区版本库
git worldgit worldgit world
git worldgit worldgit 【- -soft】
git worldgitgit 【- -mixed 默认】
gitgitgit 【- -hard 慎用】

具体使用方法:

  1. git log - -pretty=online 得到的结果如下:
    commit号1 (HEAD->master) modify ReadMe
    commit号2 add file5
    commit号3 add 3 file
    commit号4 add first file 我想要回退到这个版本
  2. 使用 git reset - -hard commit号4 (注意工作区也回退!!!)
    运行结果:HEAD is now at 58doaa3【commit号前几位】 add first file【commit 内容】
  3. 此时我们 la => .git ReadMe cat ReadMe => hello git
    我们输入 git log - -pretty=oneline => commit号4 ( HEAD-> master) add first file
  4. 如果反悔了,怎么办?我们刚刚打印出了最近一次修改的commit号1,此时我们使用 git reset - -hard commit号1,我们发现,所有的内容都回来了!log也回来了。为什么有反悔药可以吃呢?因为当前的终端还保留了之前的commit号,如果清掉屏幕/服务器关掉,再次使用git log 就拿不到之前的commit号了,那现在怎么办呢?
  5. 可以使用git reflog 这个指令记录每一次的提交命令,可以得到每次commit对应的短的commit号,使用这个短的commit号也可以进行恢复

image-20240918075753705

为什么每次回退的速度都很快呢?原因如下图:
image-20240918080420001

我们实际上回退的时候仅仅修改了master中的commit ID,所以速度很快

7.撤销修改

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

会出现下面几种情况

工作区暂存区版本库解决方式
1.xxx code1.手动撤销——不推荐,易出错
2.git checkout - - [filename] ——推荐
2.xxx codexxx codegit reset
3.xxx codexxx codexxx code前提条件:commit之后没有push,使用git reset - -hard HEAD^

​ 情况2的解决方案一:git reset HEAD ReadMe 【默认是 - -mixed 的】,HEAD表示回退到当前版本,HEAD^ 表示回退到上一版本,我们情况2的当前版本库为空。- -mixed 是暂存区和版本库回退,所以暂存区的 xxx code就清掉了,此时仅工作区有内容,就回到了情况1。之后我们再使用情况1的解决方案,git checkout - -Reade 即可

​ 情况3:版本库存在最新版本的代码 xxx code,但是上一版不包含 xxx code,我们通常使用git进行版本控制的流程如下:工作区->(git add)->暂存区->(git commit)->版本库->(git push)->远程仓库,我们情况3撤销的前提是在commit之后没有进行push,撤销的目的就是不要影响远程仓库的代码。此时我们直接使用指令 git reset - -hard HEAD^ 即可。

8.删除文件

我们删除一个文件通常有两种方式:

  1. 首先 rm file5 删除工作区的内容,然后 git add file5 将删除提交同步至 暂存区,最后再 git commit -m “delete file5” 将删除同步到版本库
  2. 首先使用git rm file5 将工作区,和暂存区的内容都删掉,最后使用git commit -m “delete xxx” 将删除提交到版本库即可。

9.理解分支

我们首先来看一个例子以便于我们更好的理解git分支功能:
image-20240918084146599

HEAD可以指向其他分支,被指向的分支就是当前正在工作的分支。

image-20240918084725575

image-20240918085653722

10.创建、切换、合并分支

git branch # 查看当前本地有哪些分支

image-20240918091348283

git branch dev # 创建一个名为dev的分支
cat .git/refs/heads 

image-20240918091804437

并且可以发现他们俩指向的提交的commit号是相同的,此时的状态为:

image-20240918092107363

我们如何切换分支呢:

git checkout dev

此时状态变成了:
image-20240918092613745

注:在dev分支上修改代码,不会影响master分支【工作区、暂存区、版本库都是】

image-20240918092851902

我们在dev上提交代码,此时状态变为了:

image-20240918092907493

那我们如果让master和dev合并,master也保持最新状态呢?分为以下两步:

  1. git checkout master
  2. git merge dev

image-20240918093150351

我们此时再

cat .git/refs/heads/master

发现此时的master主分支的commit id和dev分支之前的commit id 是相同的

image-20240918093523377

11.删除分支

删除本地分支,为了节约资源,指令为:

git branch -d dev

​ 因为创建,合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
image-20240918104324815

12.合并冲突

​ git合并冲突是怎么造成的呢?

​ 假如我们原来:master分支和dev分支 上的内容都是 aaa on dev branch

​ 这时候我们将dev分支上的内容修改为 bbb on dev branch,并且将master分支上的内容修改为 ccc on dev branch,我们再使用git merge指令来合并,就会发生冲突!!!如何解决呢?

​ 我们先在我们的服务器上复现出来上面出现的这种情况,这里再介绍一个新的指令:

git checkout -b dev1
# 这条指令等于 git branch dev1 + git checkout dev1

image-20240918110225003

模拟完上面的状态后,此时git中的状态图为:
image-20240918110424372

我们再次切换到master分支上,然后尝试去合并

git merge dev1

image-20240918110746340

如何解决冲突呢?我们先看一下我们master分支下的ReadMe文件

image-20240918110958586

我们的解决方案是:手动 vim ReadMe,然后删除掉不需要的代码即可,再将修改后的文件进行add和commit就ok了。
image-20240918111649099

此时git中的状态就是:
image-20240918111720583

我们再去验证下dev分支下还是不是原来的数据:
image-20240918111957302

此外,git也是提供可视图的:

git log --graph --abbrev-commit

image-20240918112326813

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

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

相关文章

B站开源长文本大模型:我很小但很能“装”

一、“2% GPT size, yet powerful.” 模型简介 Index-1.9B-32K 是一个拥有 1.9B &#xff08;19亿&#xff09;参数并具备 32K 上下文长度的语言模型&#xff08;这意味着&#xff0c;这个超小精灵可以一次性读完 3.5 万字以上的文档&#xff09;。 在多项长文本评测任务中&am…

单链表的实现(C语言)

目录 1.单链表 1.1 实现单链表 1.1.1 文件创建 1.1.2 链表功能了解 1.1.3 链表的结点 1.1.4 链表的函数声明 1.1.5 链表功能的实现 链表是一种链式结构&#xff0c;物理结构不连续&#xff0c;逻辑结构是连续的&#xff0c;在计算机中链表的实际存储是按照一个结点内存放…

基于springboot+vue实现的智能垃圾分类系统 (源码+L文+ppt)4-063

摘 要 本论文主要完成不同用户的权限划分&#xff0c;不同用户具有不同权限的操作功能&#xff0c;系统包括用户、物业和管理员模块&#xff0c;主要功能有用户、物业、垃圾站点、垃圾投放、验收信息、积分商城、积分充值、通知物业等管理操作。 关键词&#xff1a;智能垃圾…

微信支付开发-前端api实现

一、操作流程图 二、代码实现 <?php /*** 数字人答题业务流* User: 龙哥三年风水* Date: 2024/9/11* Time: 14:59*/ namespace app\controller\shuziren; use app\controller\Base; use app\model\param\QuestionParam as PQPModel; use app\model\answer\QuestionBank; u…

codemirror 代码在线编辑器基本使用

CodeMirror 是一个强大的基于浏览器的文本编辑器组件&#xff0c;主要用于网页中创建可编辑的源代码区域&#xff0c;特别适用于编写和展示程序代码。它支持多种编程语言的语法高亮、代码折叠、自动补全、查找替换等多种高级编辑特性。 npm install vue-codemirror --save 或者…

RabbitMQ Spring客户端使用

注解声明式队列和交换机 java自带序列化工具类&#xff0c;将java对象序列化为字节数组&#xff0c;用于网络传输。 jdk序列号存在缺陷&#xff0c;&#xff08;不安全&#xff0c;占用空间大等&#xff09; 推荐使用JSON的序列化&#xff1a; springboot扫描包使配置生效&…

WordPress建站钩子函数及使用

目录 前言&#xff1a; 使用场景&#xff1a; 一、常用的wordpress钩子&#xff08;动作钩子、过滤器钩子&#xff09; 1、动作钩子&#xff08;Action Hooks&#xff09; 2、过滤器钩子&#xff08;Filter Hooks&#xff09; 二、常用钩子示例 1、添加自定义 CSS 和 JS…

谈谈OpenAI o1的价值意义及RL 的Scaling Law

蹭下热度谈谈OpenAI o1的价值意义及RL 的Scaling law。 一.OpenAI o1是大模型的巨大进步 1.1 我觉得OpenAI o1是自GPT 4发布以来&#xff0c;基座大模型最大的进展&#xff0c;逻辑推理能力提升的效果和方法比我想的要好&#xff0c;GPT 4o和o1是发展大模型不同的方向&#x…

计算机毕业设计 乡村生活垃圾管理系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

视觉Transformer(ViT) :全面超越CNN,看懂这篇文章就没什么能难倒你了!

【视觉Transformer】(Vision Transformer, ViT) 是一种革命性的技术&#xff0c;它将Transformer架构应用于视觉识别任务&#xff0c;通过自注意力机制来捕捉图像中的特征关系&#xff0c;显著增强了模型对视觉信息的解析力。这一领域的研究不仅打破了传统卷积神经网络&#xf…

【BFS专题】— 解决拓扑排序问题

拓扑排序介绍&#xff1a; 1、课程表 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 通过Map<Integer, List<Integer>> 来创建邻接图&#xff0c;数组来表示入度然后遍历课程数组&#xff0c;建图然后再拓扑排序&#xff0c;bfs最后在遍历入度数组&…

ADB ROOT开启流程

开启adb root 选项后&#xff0c;执行如下代码&#xff1a; packages/apps/Settings/src/com/android/settings/development/AdbRootPreferenceController.java mADBRootService new ADBRootService(); Override public boolean onPreferenceChange(Preference preference…

(十五)、把自己的镜像推送到 DockerHub

文章目录 1、登录Docker Hub2、标记&#xff08;Tag&#xff09;镜像3、推送&#xff08;Push&#xff09;镜像4、查看镜像5、下载镜像6、设置镜像为公开或者私有 1、登录Docker Hub 需要科学上网 https://hub.docker.com/ 如果没有账户&#xff0c;需要先注册一个。登录命令如…

基于用户增长的动销方案实践!

在竞争激烈的市场环境下&#xff0c;实现用户增长和推动产品动销至关重要。 首先&#xff0c;明确市场定位与目标用户群体&#xff0c;通过市场调研深入了解用户需求和痛点&#xff0c;进行精准营销。同时&#xff0c;不断优化用户体验&#xff0c;提升产品质量和性能&#xff…

服装企业必备增长利器:高效商品管理系统

在时尚界的快车道上&#xff0c;服装企业如同驾驶着赛车&#xff0c;在瞬息万变的市场中疾驰。为了在这场激烈的竞赛中保持领先&#xff0c;服装企业迫切需要一把能够助其精准操作、高效运转的钥匙——商品管理系统。这不仅仅是一个软件工具&#xff0c;更是企业应对市场挑战、…

碰撞检测 | 图解线段几何与线段相交检测原理(附ROS C++可视化)

目录 0 专栏介绍1 线段与线段相交检测2 线段与圆相交检测3 线段与矩形相交检测4 算法仿真与可视化4.1 核心算法4.2 仿真实验 0 专栏介绍 &#x1f525;课设、毕设、创新竞赛必备&#xff01;&#x1f525;本专栏涉及更高阶的运动规划算法轨迹优化实战&#xff0c;包括&#xf…

[Java]maven从入门到进阶

介绍 apache旗下的开源项目,用于管理和构建java项目的工具 官网: Welcome to The Apache Software Foundation! 1.依赖管理 通过简单的配置, 就可以方便的管理项目依赖的资源(jar包), 避免版本冲突问题 优势: 基于项目对象模型(POM),通过一小段描述信息来管理项目的构建 2…

第六天旅游线路规划

第五天&#xff1a;从贾登峪返回乌鲁木齐&#xff1b; 第六天&#xff1a;从乌鲁木齐到天山天池&#xff0c;晚上回乌鲁木齐住宿。 第六天从乌鲁木齐到天山天池景区入口的的规划结果见下图&#xff1a; 1、行程安排 根据上面的耗时情况&#xff0c;规划一天的行程安排如下&a…

OFDM简介

OFDM(Orthogonal Frequency Division Multiplexing)全称为正交频分复用&#xff0c;在无线通信中被广泛应用。本文结合下图对OFDM的基本原理进行说明。 图1. OFDM信号生成流程示意图 上图为OFDM信号生成、传输和接收的整体流程图。结合该流程图对其中每一个模块进行详细说明。 …

Logstash 安装与部署(无坑版)

下载 版本对照关系&#xff1a;ElasticSearch 7.9.2 和 Logstash 7.9.2 &#xff1b; 官方下载地址 选择ElasticSearch版本一致的Logstash版本 https://www.elastic.co/cn/downloads/logstash 下载链接&#xff1a;https://artifacts.elastic.co/downloads/logstash/logst…