Git的一些基本操作

初始git

我们给出下面的一个场景,在大学里,一些老师在我们做完实验之后喜欢让我们交实验报告,假设我们有一个比较追求完美的老师和一个勤奋的学生,这个学生叫做小帅,那天小帅桑勤奋的完成实验报告,在第二天的时候就去老师办公室教实验报告,但是这个老师一看小帅的实验报告,马上说这个实验报告不行,让你区改一下,这个时候就有我们第一版本的实验报告,然后你去改了好几次,也有好多版本的时候,假设小帅已经写了五个版本的时候,老师说”小帅啊,我看你是个勤奋的学生,是这样的,我看你这个报告还是第二次的最好,你把你第二次改的实验报告拿来就可以了”,因为小帅的实验报告是在每次的基础上改的,所以没有保留之前的版本,这个小帅的心中有一万头草泥马在奔跑,就这样勤奋的小帅被刁钻的老师打败了,这个时候git的作用就可以体现出来了,他就是一个版本控制器,我们可以理解有了它,小帅就能轻松的找出第二个版本的实验报告,因为每一次的实验报告git都会记录下来,但是git可不是仅仅记录实验报告用着,对程序员来说,就是一个可以管理我们源代码的一个重要工具。

为了能够更⽅便我们管理这些不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是能让你 了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和 版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。
⽬前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的⽂件,例如 doc、excel、dwg、 dgn、rvt等等。对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项⽬中的源代码 ⽂件!
 注意事项
还需要再明确⼀点,所有的版本控制系统,Git 也不例外,其实只能跟踪⽂本⽂件的改动,⽐如 TXT ⽂ 件,⽹⻚,所有的程序代码等等。版本控制系统可以告诉你每次的改动,⽐如在第5⾏加了⼀个单词 “Linux”,在第8⾏删了⼀个单词 “Windows”。 ⽽图⽚、视频这些⼆进制⽂件,虽然也能由版本控制系统管理,但没法跟踪⽂件的变化,只能把⼆进 制⽂件每次改动串起来,也就是只知道图⽚从100KB改成了120KB,但到底改了啥,版本控制系统不 知道,也没法知道

git的本质就是一个版本控制器 

git的安装

我们可以先来查询一下我们的云服务器上是否存在git,输入指令

sudo yum -y install git

我们也可以在我们后面输入指令

git --version

来查看我们的版本(后面我演示都是在我自己的本地云服务器上)

[tjl@hecs-67680 ~]$ git --version
git version 1.8.3.1
[tjl@hecs-67680 ~]$ 

这样我们就可以查询我们的版本了。

Linux-ubuntu

如果你的平台是ubuntu我们可以执行下面的指令来安装git

sudo apt-get install git -y

 查询git的版本还是下面的这个条指令

git --version

这样我们的第一步完成了。

创建本地仓库

首先我们需要在本地创建一个目录,因为我们现在知道git是一个版本控制器,所以就应该在一个目录下进行对我们文件进行管理。

创建出目录指令

mkdir gitcode

然后我们进入目录,别忘记进入目录是cd指令

cd gitcode

然后我们在当前目录下输入指令

git init

就可以对我们的仓库进行初始化了。

我们执行指令就可以看到我们下面的结果

[tjl@hecs-67680 gitcode]$ ll -a
total 12
drwxrwxr-x  3 tjl tjl 4096 Feb  5 11:46 .
drwx------ 20 tjl tjl 4096 Feb  4 21:17 ..
drwxrwxr-x  8 tjl tjl 4096 Feb  4 22:34 .git

因为我这里直接创建过东西,所以有一些东西不一样,我把它删了,看到的就是这个东西

先来了解这里.git是一个什么东西,它就是版本库,我们来看看下面的这个图

执行指令tree .git

可以看到这个就是.git版本库里面的东西,我们后面会一个一个讲解,比如这里的Head指针

对象库(objects)还有暂存区(index)这些,现在我们需要做的就是完成一些配置

我们直接执行下面的指令进行配置

git config --global user.name "内容(比如我写的就是姓名缩写)"
gti config --global user.email "最好输入就是你的邮箱,便于管理"

 我们这里如果没有加上--global就不是全局的,最好写成就是加上的,这样所有的地方都有你的记录,在企业中我们的姓名和邮箱这个是很重要的,因为这样就可以看到每次提交人的信息,以便有问题的时候可以找到你。

当然如果我们一开始设置错误的时候,我们也可以进行重置,指令就是

git config --unset user.name
git config --unset user.email

注意:我们的指令进行的时候可一定要在我们的仓库下执行,否则没有我用

认识⼯作区、暂存区、版本库

图来

啥是我们的工作区,啥是我们的版本库呢???

首先在我们的仓库下,也就是我们的目录下,除了.git的区域就是我们的工作区,而我们的.git就是版本库了,那他们有是联系吗。

首先就是我们这里就需要来了解一下两条指令

git add [文件名]//将我们工作区的内容提交到暂存区
git commit -m "标签"//将我们的内容提交到版本库中,会有一个HEAD的指针来进行指示

只有在commit之后我们的内容才会真正的进入版本库中了

 

这里需要扩展的一点因为我们的 暂存区其实是一个轻量级的库,所以其实我们一些修改的内容在add的时候是放在对象库中,这里修改的内容是指哪些呢,首先就是新增文件,在文件里添加内容,删除文件,这些操作都会存在对象库中。然后我们的暂存区就会从里面拿出内容add进去。

我们现在我们目录下,也就是工作区创建出一个文件叫做ReadMe,并用vim在里面添加一些文本内容。

[tjl@hecs-67680 gitcode]$ vim ReadMe
[tjl@hecs-67680 gitcode]$ ll
total 4
-rw-rw-r-- 1 tjl tjl 10 Feb  5 12:12 ReadMe
[tjl@hecs-67680 gitcode]$ cat ReadMe 
Hello Git

然后进行git add进行添加到我们的暂存区当中。

git add ReadMe 

那要彻底的放到我们的版本库中的话需要执行的指令就是git commit -m "first add"

执行指令可以看到以下的场景。

[tjl@hecs-67680 gitcode]$ git commit -m "the first add"
[master a6900ba] the first add1 file changed, 1 insertion(+), 2 deletions(-)

我们也可以继续用git log来查询我们的提交记录

因为之前提交过内容,所以大家看的这里比较多,但是其实如果大家一开始什么都没提交的话,请情况只有这里的第一条内容,我们这里可以看到每次提交的时间,还有姓名和邮箱,这样就话在企业里也可以对你进行很好的管理。

我们也可以只打印这里的commit ID

[tjl@hecs-67680 gitcode]$ git log --pretty=oneline
a6900ba4258d83df1a8e67c1f4f2ffed32946633 the first add
3e54e85c13b3492b5a27fed80d8e3baa19c247ec the second commit
f9cca32c3296b756ff8fe68371280e1f2bab5828 the first commit

 

需要说明的是,我们看到的⼀⼤串类似 23807c5...56eed6 的是每次提交的 commit id (版本
号),Git 的 commit id 不是1,2,3……递增的数字,⽽是⼀个 SHA1 计算出来的⼀个⾮常⼤的数 字,⽤⼗六进制表⽰(你看到的 commit id 和我的肯定不⼀样,以你⾃⼰的为准)

 因为为了更好的演示后面的一些操作我们这里还需要添加一些文件,大家可以看看我下面的操作,就不讲解没一个操作是怎样的,因为很简单。

[tjl@hecs-67680 gitcode]$ touch test1 test2
[tjl@hecs-67680 gitcode]$ git add test1 test2
[tjl@hecs-67680 gitcode]$ touch test3
[tjl@hecs-67680 gitcode]$ git add test3
[tjl@hecs-67680 gitcode]$ git commit -m "commit test"
[master a9ff80a] commit test3 files changed, 0 insertions(+), 0 deletions(-)create mode 100644 test1create mode 100644 test2create mode 100644 test3
[tjl@hecs-67680 gitcode]$ 

再来打开我们.git

现在我们就可以清楚的看到一些变化,首先就是我们的暂存区(index)

1 index 就是我们的暂存区,add 后的内容都是添加到这⾥的。
2. HEAD 就是我们的默认指向 master 分⽀的指针

 我们也可以来看看HEAD下的东西

[tjl@hecs-67680 gitcode]$ cat .git/HEAD
ref: refs/heads/master
[tjl@hecs-67680 gitcode]$ 

然后我们再来进入一个目录

[tjl@hecs-67680 gitcode]$ cat .git/refs/heads/master
a9ff80ab653911ff6127ef4450b04accf52eca4b

下面的这个ID其实就是我们最近一次commit的ID,这个ID就可以来来查看对象中的内容

[tjl@hecs-67680 gitcode]$ git cat-file -p a9ff80ab653911ff6127ef4450b04accf52eca4b
tree d2c1bc8d75fc468be739934ae0d1217eec64ce3b
parent a6900ba4258d83df1a8e67c1f4f2ffed32946633
author tjl <2357850265@qq.com> 1707107089 +0800
committer tjl <2357850265@qq.com> 1707107089 +0800commit test

这个就是我们的最近一次对这些文件的修改都被记录下来了

总结⼀下,在本地的 git 仓库中,有⼏个⽂件或者⽬录很特殊  

 

index: 暂存区, git add 后会更新该内容。
HEAD: 默认指向 master 分⽀的⼀个指针。
refs/heads/master: ⽂件⾥保存当前 master 分⽀的最新 commit id
objects: 包含了创建的各种版本库对象及内容,可以简单理解为放了 git 维护的所有修改。

 这里继续添加两个指令

git status //来查看上次提交之后在工作区中的内容是否被修改
git diff [文件] //来显示工作区和暂存区的不同

啥意思呢???

就是我们在工作区是可以继续一些操作,比如我们是不是可以创建出文件,也可以在文件中新增内容,但是我们没有进行add操作,这些内容就还是在工作区,我们并没有将修改的对象加载到暂存区,所以就可以用git status 来查看,然后git diff可以更清楚的对比我们到底哪里进行修改,有人就会问,我刚修改的对象我怎么可能忘记呢!假如场景是下面的这个,有一天你写了代码提交了,然后你又改了,改好之后你妈叫你去吃饭了,然后你忘记提交了,三天之后你还记得你改在哪里了吗,所以git diff就可以来帮助我们解决这个问题

版本回退

之前我们也提到过,Git 能够管理⽂件的历史版本,这也是版本控制器重要的能⼒。如果有⼀天你发现 之前前的⼯作做的出现了很⼤的问题,需要在某个特定的历史版本重新开始,这个时候,就需要版本 回退的功能了。

有时候我们可能想找到上一版本的时候我们也可以通过版本回退的操作进行查找,指令就是以下的内容

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

 

看这个图就可以来理解我们使用不同指令进行回退的时候应该加上那个指令

一般不建议加上 --haed,因为这个是把工作区,暂存区,版本库的内容都回退,虽然可以用指令查询到,但是如果commit ID变了的话就不能查询到了,反正建议就是最好不要用,。

 查询以往commitID可以用的指令

git reflog 

今天的内容就到这里,后面会继续更新git的内容!

 

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

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

相关文章

[C/C++] -- JSON for Modern C++

JSON for Modern C&#xff08;nlohmann/json&#xff09;是一个流行的 C JSON 库&#xff0c;由德国开发者nlohmann编写。这个库提供了简洁而灵活的 API&#xff0c;使得在C中解析和生成JSON数据变得非常方便。 1.JSON简介 JSON&#xff08;JavaScript Object Notation&…

台灯学生用哪个牌子好?学生用护眼台灯品牌推荐

晚上学习&#xff0c;有台灯肯定比没台灯好。只要是盏合格的、能用的台灯&#xff0c;都能给你一个稳定又亮堂的环境。但是有些不合格的台灯会给眼睛带来伤害&#xff0c;尤其是学习负担比较重的学生。那有哪些台灯是学生用着比较好用的呢&#xff1f; 一、学生使用护眼台灯的…

图数据库neo4j入门

neo4j 一、安装二、简单操作<一>、创建<二>、查询<三>、关系<四>、修改<五>、删除 三、常见报错<一>、默认的数据库密码是neo4j,打开浏览器http://localhost:7474登录不上,报错: Neo.ClientError.Security.Unauthorized: The client is un…

#Z0463. 巡逻1

Description 在一个地区中有 n 个村庄&#xff0c;编号为 1, 2, ..., n。有 n – 1 条道路连接着这些村 庄&#xff0c;每条道路刚好连接两个村庄&#xff0c;从任何一个村庄&#xff0c;都可以通过这些道路到达其 他任一个村庄。每条道路的长度均为 1 个单位。 为保证该地区的…

如何使用Python + 百度翻译API 自动大批量免费翻译Excel文件中的外语内容

手里有一个Excel文件,包括了大量的亚马逊德语搜索词(关键词),每个单元格1个,需要翻译为中文。但是文件大小超过了10M,不能使用百度或Google免费的文档功能,如果手工一个个的翻译然后粘贴又太麻烦,于是想到用Python加免费翻译API完成。 一、openpyxl库 用Python编辑处…

Magnet AXIOM取证神器的安装使用方法及详细教程

Magnet AXIOM取证神器的安装使用方法及详细教程 公众号&#xff1a;鱼影安全1.Magnet AXIOM取证工具介绍&#xff1a;2.Magnet AXIOM取证工具安装&#xff1a;第一步&#xff1a;第二步&#xff1a; 3.Magnet AXIOM取证工具使用方法&#xff1a; 公众号&#xff1a;鱼影安全 关…

112.乐理基础-五线谱-五线谱的调号(一)

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;111.乐理基础-五线谱-五线谱的节奏型、打拍子-CSDN博客 首先需要掌握&#xff0c;下图中的所示的内容&#xff1a;内容可以在 乐理基础 这里找到&#xff0c;名字上带※符号的找不到 首先回顾七个白键触发的大调音…

香港的低价服务器:2024年稳定服务商推荐

对于用户而言&#xff1a;使用香港服务器无非是觉得免备案、或者业务是集中在日本或东南亚地区&#xff0c;无论是哪些因素驱使&#xff0c;其实用户想要的就是一个低价稳定&#xff01;如果服务器都连不上&#xff0c;再便宜又有什么用处。 所以先给各位用户提个醒&#xff0…

day28打卡

day28打卡 93. 复原 IP 地址 见注释 class Solution { public:vector<string> ret;vector<string> restoreIpAddresses(string s) {string ip;dfs(s, 0, ip);return ret;}//n记录小数点个数void dfs(string s, int n, string ip){//n为4if(n 4){//如果字符s没有…

力扣精选算法100道——和为 K 的子数组[前缀和专题]

和为K的子数组链接 目录 第一步&#xff1a;了解题意​编辑 第二步&#xff1a;算法原理 第三步&#xff1a;代码 第一步&#xff1a;了解题意 数组中和为k的连续子数组&#xff0c;我们主要关注的是连续的&#xff0c; 比如[1,1,1],和为2的子数组有俩个&#xff0c;比如第…

HDL Designer 2021.1 如何将默认编辑器修改为VsCode

第1步 安装Vscode 第2步 添加Vscode至HDL Designer 第3步 更改HDL Designer编译器 第4步 修改结束&#xff0c;在HDL Designer中双击block可使用Vscode编辑verilog

通过无线打通两个路由器

通过无线打通两个路由器 上网向导无线连接 配置比较简单&#xff0c;有些路由器支持有些不支持&#xff0c;支持的大致就是下面的方法&#xff0c;不过不同型号面板不一样&#xff0c;这里主要学习方法&#xff0c;所以不做路由器型号介绍。 重要的事情说三遍&#xff1a;学习要…

云端录制直播流视频,上传云盘

前言 哪一天我心血来潮&#xff0c;想把我儿子学校的摄像头视频流录制下来&#xff0c;并保存到云盘上&#xff0c;这样我就可以在有空的时候看看我儿子在学校干嘛。想到么就干&#xff0c;当时花了一些时间开发了一个后端服务&#xff0c;通过数据库配置录制参数&#xff0c;…

挑战杯 python+深度学习+opencv实现植物识别算法系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的植物识别算法研究与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;4分 &#x1f9ff; 更多…

93.网游逆向分析与插件开发-游戏窗口化助手-升级经验数据获取的逆向分析

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;显示游戏数据到小助手UI 码云地址&#xff08;游戏窗口化助手 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;852c339f5e4c103390b123e0eaed…

浅析现代计算机启动流程

文章目录 前言启动流程概述磁盘分区格式MBR磁盘GPT磁盘隐藏分区 传统BIOS引导传统BIOS启动流程 UEFI引导UEFI引导程序UEFI启动流程 引导加载程序启动操作系统相关参考 前言 现代计算机的启动是一个漫长的流程&#xff0c;这个流程中会涉及到各种硬件的配置与交互&#xff0c;包…

Python接口自动化测试框架运行原理及流程

这篇文章主要介绍了Python接口自动化测试框架运行原理及流程,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本文总结分享介绍接口测试框架开发&#xff0c;环境使用python3selenium3unittestddtrequests测试框…

【GAMES101】Lecture 17 材质

目录 材质 漫反射 镜面反射 折射-Snell’s Law Fresnel Reflection / Term&#xff08;菲涅耳项&#xff09; 微表面模型 各向同性与各向异性 BRDF的性质 测量BRDF 材质 渲染方程中的BRDF描述了物体是如何与光线作用的&#xff0c;而物体的材质决定了它看起来是怎么样…

【深度学习理论】持续更新

文章目录 1.统计学习理论 1.统计学习理论 统计学习理论&#xff0c;一款适合零成本搞深度学习的大冤种的方向 从人类学习到机器学习的对比&#xff08;学习的过程分为归纳和演绎 &#xff09;&#xff0c;引出泛化和过拟合的概念。 如何表示归纳的函数规律呢&#xff1f;以监督…

RTthread线程间通信(邮箱,消息队列,信号/软件中断)---01实际使用API函数

layout: post title: “RT-Thread线程间通信” date: 2024-2-5 15:39:08 0800 tags: RT-Thread 线程间通信 这一篇是实际使用, 代码分析看后面的文章 一般可以使用全局变量以及线程间同步进行实现 RT-Thread也提供了一部分的通信机制 邮箱 一个线程发送, 另外的线程接受信息…