Git 使用指南 --- 版本管理

news2024/12/22 20:31:06

序言

Git 是一个开源的 分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。对一个程序员来说,掌握 Git 的使用是必要的。
 在这个系列中,将详细的介绍 Git 的使用和原理,话不多说,让我们开始吧。


1. 安装 Git

1.1 Linux — Centos

 首先你可以使用指令来查看是否已安装 Git

git

若未安装,则会显示信息:

-bash: git: command not found

可使用指令安装 Git

sudo yum -y install git

1.2 Linux — Ubuntu

 同样的,你可以使用指令来查看是否已安装 Git

git

若未安装,则会显示信息:

Command 'git' not found, but can be installed with:
sudo apt install git

可使用指令安装 Git

sudo apt install git

1.3 Windows

Windows 系统下,大家首先可以点击 Git 官网下载链接 下载 git。在安装时会有许多额外的选项,对初学者的我们来说,一路点击 next 使用默认选项就要够啦。
 现在,怎么使用呢?首先,随便点击一个文件夹,然后点击 查看更多选项,之后,如果弹出的选项中包含如下图像就说明成功安装了!
在这里插入图片描述


2. 初始化本地仓库

 创建一个本地的仓库,本质就是创建一个 进行版本控制的文件目录,要对文件进行版本控制,就必须先创建仓库。

2.1 创建本地仓库

 先进入到你想要进行版本管理的文件夹当中,使用指令 git init,即可创建一个本地仓库:
!](https://i-blog.csdnimg.cn/direct/7893354ae2c843f08498c3c924e8f7f9.png)
这里文件夹中多了一个名为 .git 的文件说明创建成功了!

2.2 初始化用户名和邮箱

 之后便是配置用户信息,你需要配置你的用户名:

git config [--global] user.name "Your_Name"

还需要配置你的邮箱:

git config [--global] user.email "Your_Email"

在这里的 [--global] 代表是一个可选项,如果加上则代表 这台机器所有的 Git 仓库 都会使用该消息配置。

 你可以使用指令来查看你所配置的信息:

git config -l

如果你想要删除相应的信息:

git config unset [--global] user.name // 删除用户名
git config unset [--global] user.email // 删除邮箱

3. 相关操作以及区域概念

 首先我们需要理解 工作区,暂存区,版本库 的概念:

  • 工作区:当我们增删改文件时,所处在的目录。
  • 暂存区:存放在 .git 目录下的 index 文件中,提供了在提交之前对更改进行组织和准备的能力
  • 版本库:⼯作区有⼀个隐藏⽬录 .git ,它不算⼯作区,⽽是 Git 的版本库。这个版本库⾥⾯的所有⽂件都可以被 Git 管理起来,每个⽂件的修改、删除都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

这些概念现在大家看来会十分摸不着头脑,但是随着我们后面逐渐的深入,大家再来看就会有自己的理解了,但是现在大家请记住 真正进行版本管理的地方是版本库!

3.1 添加文件

 我们可以使用指令将一个或多个文件从工作区存入暂存区:

git add [file1] [file2] [file3]... // 将指定文件添加到暂存区
git add . // 将工作区所有文件添加到暂存区

 之后,我们可以使用指令将文件从暂存区存入到版本库中:

git commmit -m "Your_Msg" // 在这里,需要描述你的提交细节,帮助其他人看到更好的理解

在完成这两步之后,会显示信息:
在这里插入图片描述
一个文件被改变,插入一行内容。

3.2 删除文件

 如果我们想要删除一个版本库中的文件,首先你需要使用指令将该修改写入暂存区中:

git rm [file]

之后将删除操作提交到版本库,完成更新:

git commmit -m "Your_Msg" 

3.3 修改文件

 首先我对我的文件对多写入了一行内容,先介绍一个命令可以查看你仓库的状态(那些文件被修改后还没有添加提交):

git status

输入该指令后,我们可以看到:
在这里插入图片描述
他告诉我们 readme 这个文件被修改了,我们可以使用指令来查看工作区和暂存区的区别:

git diff [file]

这里输出的格式可能大家会觉得很奇怪:
在这里插入图片描述

这里的 - 代表的是暂存区中的内容,+ 代表的是工作区中的内容(最新的),所以
@@ -1 +1, 2 @@ 代表的是:

  • 旧内容是第一行
  • 新内容是第一行开始到第二行

之后将修改的文件上传的版本库的操作和添加文件一摸一样。


3.4 查看日志信息

 我们可以通过指令来查看我们的历史提交记录:

git log

在这里插入图片描述
可以看到这里记录所有提交的详细信息,并且每一次提交都会分配一个 commit id每一次提交都代表一个新的版本,所以这里可以理解为这是一个版本号

 你也可以添加选项让更为优雅的输出相应的信息:

git log --pretty=oneline

在这里插入图片描述

3.5 .git 文件

 在经过了上述一系列操作之后,我们再查看这个神奇的 .git 文件,我们使用指令 tree .git/ 以树状的形式查看目录:
在这里插入图片描述
我们介绍其中比较重要的几个组成部分:

  1. index:这就暂存区,我们 add 的文件都存在于此处

  2. HEAD:指向 当前正在工作的分支,默认指向 master(多分支时进一步介绍): 在这里插入图片描述
    master 又指向的是什么呢?使用 cat 指令查看一下:
    在这里插入图片描述
    一串很长的不知道是什么的序列,不知道大家还记得我们在前面讲到过一个概念commit_id,这串序列就是 commit_id,我们使用 git log 指令打印一下提交记录,查看是否存在这样一个 commit_id
    在这里插入图片描述
    不仅找到了还是第一个(最新那个),不难推断 — master 保存的就是当前最新 的 commit id

  3. objects:为 Git 的对象库,⾥⾯包含了创建的各种版本库对象及内容。当执⾏ git add 命令时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的对象中,就位于 .git/objects ⽬录。


4. 版本回退

4.1 回退指令

 在开始讲解回退之前,我们想了解一个重要的指令:

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

回退 本质是 将版本库中的内容进⾏回退,⼯作区或暂存区是否回退由命令参数决定。

 现在我们先介绍前一个选项:
--mixed 为默认选项,使⽤时可以不⽤带该参数。该参数 将暂存区的内容退回为指定提交版本内容,⼯作区⽂件保持不变。
--soft 参数对于 ⼯作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
--hard 参数 将暂存区与⼯作区都退回到指定版本。切记⼯作区有未提交的代码时不要⽤这个命令,因为⼯作区会回滚,你没有提交的代码就再也找不回了,所以使⽤该参数前⼀定要慎重 !!!

在这里向大家举个栗子:
在这里插入图片描述
 现在我们介绍第二个参数,该参数代表我们需要回退的版本,默认 HEAD 是当前版本:

  • HEAD^ 代表上一个版本,HEAD^^ 代表上两个版本,以此类推
  • commit id 代表的就是一个版本号,可使用 commit id 回退到指定版本,使用 git log / git reflog 查看 commit id

4.2 回退场景

1. 只是修改工作区中的代码

 我完成了第一版代码,并且已经上传到版本库中了。现在我想要在第一版的基础上进行改善,但是经过改造之后原本可以正常运行的代码成功的歇菜了。
 现在我想要将我工作区的代码回退到版本一,方案一:最笨的方法就是手动删除当然极其不推荐。
 方案二:使用指令 git checkout -- [file] 将工作区的代码更新为最新提交到暂存区的文件

2. 修改的代码添加到暂存区

 现在我不小心将我的代码也添加到了暂存区中,这又改怎么回退到版本一呢?
使用指令 git reset --hard HEAD ,就可以将你的工作区和暂存区便回来啦!

3. 修改的代码提交到版本库

 这个就直接使用我们的指令 git reset --hard HEAD^,解决起来还是比较简单。

4. 回退的本质

 在 Git 内部当中,是怎么实现版本回退的呢,请看下图:
在这里插入图片描述
我们在前面介绍过 master 保存的就是当前最新的 commit id(版本),改变当前的版本,也就是改变 master 的指向。


5. 总结

 在这篇文章中我们介绍了 Git 的版本管理以及其背后的部分原理,希望大家有所收获!

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

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

相关文章

C# 加解密之DES

说完了对称加密中的AES,这一篇再来介绍下DES。加解密原理什么的就不介绍了,大家可以自行百度(主要我也不太明白,也不需要太明白),大致说一下两者的区别吧! 首先肯定是加密算法的不同&#xff0…

模型大师们!答应我把这8本书翻烂好嘛?

模型大师们,准备好踏上一段深度学习与模型构建的路了吗? 这里有八本经典之作,它们将是你攀登知识高峰的阶梯! 从《PyTorch深度学习实战》到《大模型时代》 从掌握基础框架到洞悉大模型时代的变革 模型大师,准备好了吗&#xff…

RabbitMQ核心架构

RabbitMQ架构设计 Producer:负责产生消息。 Connection:RabbitMQ客户端和代理服务器之间的TCP连接。 Channel:建立在连接之上的虚拟连接,RabbitMQ操作都是在信道中进行。 Broker:一个Broker可以看做一个RabbitMQ服…

TP5发送邮件功能如何实现?怎么配置服务?

TP5发送邮件性能优化如何优化?怎么使用TP5发送邮件? 在现代Web开发中,TP5框架因其高效和灵活性而广受欢迎。无论是用于用户注册验证、密码重置还是定期通知,TP5发送邮件功能都能提供强大的支持。AokSend将详细介绍如何在TP5框架中…

开放式耳机和骨传导耳机哪个好?2024年开放式耳机排行榜10强

随着耳机市场的不断发展,开放式耳机和骨传导耳机逐渐成为两大热门选择。无论是追求高音质还是重视佩戴舒适度,消费者在选购耳机时都面临着一个重要问题:开放式耳机和骨传导耳机到底哪个更好?今天我们就来深入对比这两种耳机的优缺…

顶会最高分的文章怎么写?基于CNN的时间序列新SOTA就是最好的答案!

【时间序列CNN】(卷积神经网络)在近年来的深度学习领域中备受关注,它通过将卷积神经网络应用于时间序列数据,显著提升了模型在特征提取和模式识别任务中的表现。时间序列CNN技术已经在金融预测、健康监测和工业设备故障检测等多个…

竟然有50万个使用Flutter开发的应用了,这也太牛了!

近期工作比较清闲,在Flutter和React Native两者中犹豫学习哪个,做了不少功课,最终决定入手Flutter。原因很简单,感觉Flutter更有前景,另外B站也找到了适合自己学习的Flutter免费教程,天时地利人和&#xff…

进程的那些事——了解进程(虚拟地址空间)

目录 前言 一、程序地址空间(虚拟地址空间) 二、虚拟地址寻找物理内存 1.页表 总结 前言 提示:这里可以添加本文要记录的大概内容: 程序和进程之间的区别: 进程:对用户而言,进程是运行中的…

写卡片可以成为专家吗?

前一段,一位同学问我: 写小卡片记录巅峰,积少成多就一定能成为行业专家了吗? 我的观点如下: 想成为行业专家,我认为要有两类卡片: 1. 对同行专家知识学习后,所写的卡片。比如&am…

【专项刷题】— 字符串

1、最长公共前缀 - 力扣(LeetCode) 思路: 解法一:两两比较字符串解法二:比较每一个字符串的同一位图解:代码: class Solution {public String longestCommonPrefix(String[] strs) {String ret …

北京精诚博爱医院简介

北京精诚博爱医院位于北京市朝阳区崔各庄乡南皋路188号,地处东北五环外,毗邻首都机场高速,与北京798艺术区和草场地艺术区隔窗相望,交通便捷。是一所以医疗、康复、预防保健为一体综合性医保定点医院。 医院为国家呼吸临床中心医联…

旺店通ERP集成用友NC(用友NC主供应链)

源系统成集云目标系统 用友NC介绍 用友NC是用友NC产品的全新系列,是面向集团企业的世界级高端管理软件。它以“全球化集团管控、行业化解决方案、全程化电子商务、平台化应用集成”的管理业务理念而设计,采用J2EE架构和先进开放的集团级开发平…

基于Java的在线文献检索系统

基于springbootvue实现的在线文献检索系统(源码L文ppt远程调试)4-027 第4章 系统设计 4.1 总体功能设计 一般个人用户和管理者都需要登录才能进入在线文献检索系统,使用者登录时会在后台判断使用的权限类型,包括一般使用者…

C# NX二次开发-获取体全部面

使用 UF_MODL_ask_body_faces 或获取一个体的全部面: 代码: theUf.Modl.AskBodyFaces(body.Tag, out var face_list);face_list.Foreach(x > x.NxListing()); 免责声明: 只用于参考,如果有什么问题不要找我呀。

【Google Play】携程旅行8.71.6最新国际版(如何鉴别是否官方?)

作为业内权威的在线旅游服务公司,携程旅行手机客户端提供中国境内超过11万家酒店和公寓的选择,海外则有超过70万家酒店可供预订。覆盖所有国内航线机票以及大部分主流国际航线,国内火车票全覆盖,长途汽车票则涵盖了500多个城市的2…

Tauri应用开发实践指南(6)— Tauri 主题多语言设置开发

前言 在现代应用开发中,用户界面的主题和多语言支持是提升用户体验的关键因素。本文将介绍如何在Tauri应用中实现窗口主题设置和多语言设置的开发,并提供更多实用的技巧和最佳实践。 我们在上一节中实现了集成本地数据库的操作,现在通过这个能力再实现主题&多…

分布式微服务项目mysql不同数据库之间跨库联查,使用快捷表实现跨库分页查询

场景: 在分布式微服务项目中,经常有需要关联查询其他表信息的业务,但分布式项目中分库是肯定的,不同服务的数据库服务可能部署在不同的机器上,以下是几种跨库联查分页的几种解决方式 一、快捷表联查【推荐】 1、联合与被联合的数据库服务 FEDERATED 引擎都要开启…

Cpp学习手册-基础学习

首先你要去网上下载对应的运行软件,先把对应的 C 环境配置好,配置好了我们就可以开始我们的C 学习之旅了。希望通过学习我们能够成为一个比较不错的 C 开发工程师。我也会持续更新 C 知识。 1. C语法基础 当我通过 CLion 工具创建了一个新的 Project 。…

linux(ubuntu)安装QT-ros插件

Linux下的qt安装ros插件 查看qt版本和对应的ros插件版本查看qt版本查看 qt creator 版本 qt creator进行更新升级下载版本对应的ros_qtc_plugin 插件插件安装安装成功 查看qt版本和对应的ros插件版本 想要qt与ros联合开发,我门需要在qt creator中添加ros的插件&…

髓鞘少突胶质细胞糖蛋白;MOG 35-55 ;CAS:149635-73-4

【MOG35-55 简介】 髓鞘少突胶质细胞糖蛋白(Myelin Oligodendrocyte Glycoprotein,MOG)是一种在中枢神经系统中表达的糖蛋白,主要由少突胶质细胞产生,并在髓鞘形成中发挥作用。 【中文名称】髓鞘少突胶质细胞糖蛋白 …