版本控制器Git(1)
文章目录
- 前言
- 一、初识Git
- 问题引入
- 解决方案
- 注意事项
- 二、Git安装
- 三、Git配置与基本操作
- Git创建
- Git配置用户名称和地址
- 认识工作区、暂存区、版本库
- 添加文件到仓库
- 添加文件到暂存区
- 提交暂存区内容到本地仓库
- 查看提交历史
- 四、Git 暂存区、HEAD、对象库及文件
- Git内部结构概览
- 查看和理解 Git 对象
- 工作区、暂存区、版本库的操作流程
- 总结
前言
我又又开新篇了,一个方向学得有点累了就换下口味,只要在后端这个大方向下就行!
这并不难,但是确实是开发过程中不可或缺的工具,赶快学起来吧!
一、初识Git
问题引入
想象一下,你现在在写一份材料报告,交了第一版后被mentor打回,改到第十版又被要求还是提交第一版,这个时候你估计想刀Ta的心就有了
诸如此类,在日常工作或学习中,我们常常遇到需要保存多个版本文件的情况,例如文档编写时为了防止丢失或误改而产生的多个副本(如“报告-v1”、“报告-v2”等)。随着版本数量增加,不仅文件数量增多,而且难以记住每个版本具体修改了什么内容。同样地,项目代码也存在同样的问题
解决方案
为了能够更⽅便我们管理这些不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是能让你了解到⼀个⽂件的历史,以及它的发展过程的系统。
通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。
⽬前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的⽂件,例如 doc、excel、dwg、dgn、rvt等等。对于我们程序员来说,Git 最重要的就是可以帮助我们管理软件开发项⽬中的源代码⽂件!
注意事项
还需要再明确⼀点,所有的版本控制系统,Git 也不例外,其实只能跟踪⽂本⽂件的改动,⽐如 TXT ⽂件,⽹⻚,所有的程序代码等等。版本控制系统可以告诉你每次的改动,⽐如在第5⾏加了⼀个单词“Linux”,在第8⾏删了⼀个单词 “Windows”。
⽽图⽚、视频这些⼆进制⽂件,虽然也能由版本控制系统管理,但没法跟踪⽂件的变化,只能把⼆进制⽂件每次改动串起来,也就是只知道图⽚从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
二、Git安装
请注意,我是在CentOS Linux release 7.6.1810 (Core)环境下操作的
可以通过以下指令查看git版本,也就是查看了是否安装了git
git --version

若还没下载,可以通过这行指令来下载git,在我的本地环境里面我已经下载了
sudo yum -y install git

三、Git配置与基本操作
Git创建
要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来
创建本地Git仓库的命令是git init。此命令需要在你希望作为仓库根目录的文件夹内执行

执行上述命令后,你会注意到当前目录下出现了一个名为.git的隐藏目录,而我已经创建过,所以提示重复初始化git仓库
.git目录是Git用来跟踪和管理仓库的地方。它包含了所有必要的元数据和配置文件。注意不要手动修改这个目录中的文件,以免破坏Git仓库的结构。
对于有兴趣深入了解的 uu,可以在不影响项目的情况下探索.git目录的内容,以增进对Git工作原理的理解。

Git配置用户名称和地址
当安装完 Git 后,首要任务是设置你的用户名称和 E-mail 地址。这是非常重要的,因为每次 Git 提交都会使用这些信息。
- 全局配置(适用于所有仓库):
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
- 本地配置(仅适用于当前仓库):如果希望在不同仓库中使用不同的用户名或邮箱,可以在特定仓库内执行以下命令,而不带 --global 选项:
git config user.name "Your Name"
git config user.email "email@example.com"
- 查看配置:使用以下命令可以列出所有的 Git 配置项:
git config -l
git config --list

- 删除配置:若要删除某个配置项,可以使用 --unset 选项:
git config [--global] --unset user.name
git config [--global] --unset user.email
认识工作区、暂存区、版本库
- 工作区:这是你在电脑上编写代码或文件的目录。
- 暂存区(Stage/Index):一般存放于 .git/index 文件中,用于存储即将提交到版本库中的更改。
- 版本库(Repository):位于工作区的隐藏 .git 目录下,用来管理所有文件的修改和历史记录。
当你创建一个新的 Git 版本库时,Git 会自动创建一个名为 master 的分支及指向该分支的 HEAD 指针。对工作区的文件进行修改后,需先通过 git add 命令将更改添加到暂存区,再通过 git commit 将暂存区的内容提交至版本库。

.git 是 Git 用来跟踪和管理仓库的地方,包含了所有必要的元数据和配置文件。不要手动修改这个目录中的文件,以免破坏 Git 仓库的结构。

添加文件到仓库
要将新文件或修改后的文件添加到 Git 管理中,需要经历两个步骤:add 和 commit。
添加文件到暂存区
添加单个或多个文件:
git add [file1] [file2] ...
添加指定目录及其子目录:
git add [dir]
添加当前目录下的所有改动:
git add .
提交暂存区内容到本地仓库
提交暂存区的所有内容(默认):
git commit -m "message"
提交暂存区的指定文件:
git commit [file1] [file2] ... -m "message"
注意,git commit 后面的 -m 参数用于提供描述性提交信息,这部分内容非常重要,因为它记录了你所做的更改细节。

查看提交历史
你可以使用 git log 查看项目的提交历史。为了简化输出,还可以加上 --pretty=oneline 参数以获得更简洁的格式。
git log --pretty=oneline

这将显示每个提交的简短摘要(漂亮的一行),包括 提交 ID(SHA1 格式的哈希值),它是一个由 Git 自动生成的唯一标识符,用以区分不同的提交。
你看到的 commit ID 肯定跟我不一样,这以你的为准
四、Git 暂存区、HEAD、对象库及文件
Git内部结构概览
- 暂存区(Index)
- index 文件位于 .git 目录下,是暂存区的物理存储位置。
- 使用 git add 命令后,修改或新增的内容会被添加到这里。暂存区的作用是在提交前收集所有要纳入版本控制的更改。
- HEAD 指针
- 默认情况下,HEAD 是指向当前分支的一个指针,通常是指向 master 分支。
- 可以通过查看 .git/HEAD 文件来确认 HEAD 当前所指向的分支。
- master 分支
- master 分支是一个特殊的默认分支,代表项目的主线发展。
- 查看 master 分支最新的提交 ID(commit id),可以通过查看 .git/refs/heads/master 文件内容

- 对象库(Objects)
- .git/objects 目录存放了所有被 Git 管理的对象,包括提交(commits)、树(trees)、标签(tags)和 blob(文件内容)。
- 对象名由 SHA-1 哈希值表示,前两位作为子目录名,剩余部分作为文件名。例如,对于提交 ID c9091af21fd2929fd9a8c42876a1f6ba686eb3b9,其路径为 .git/objects/c9/091af21fd2929fd9a8c42876a1f6ba686eb3b9。

查看和理解 Git 对象
- 使用 git cat-file -p < object-id > 命令可以解码并查看对象的内容。
- 提交对象包含元数据(如作者信息、时间戳)以及指向树对象的引用

工作区、暂存区、版本库的操作流程
添加文件到仓库
- 新建或修改文件后,使用 git add 将更改添加到暂存区。
- 使用 git commit 提交暂存区的内容到本地仓库中。注意,只有在暂存区中的文件才会被提交。
处理未添加到暂存区的文件
- 如果有新的文件没有通过 git add 添加到暂存区,那么这些文件不会被 git commit 捕获。
- 解决方法是再次执行 git add 后再进行 git commit。
修改文件
- Git 跟踪的是修改而非文件本身。任何对文件内容的变更(如新增行、删除行、更改字符等)都被视为一次修改。
- 修改文件后,可以使用 git status 查看哪些文件已被修改但尚未添加到暂存区。
- 使用 git diff [file] 显示工作区与暂存区之间的差异,帮助理解具体做了哪些改动。
- 使用 git diff HEAD – [file] 查看工作区与最近一次提交之间的区别。

提交修改后的文件
- 修改文件后,先用 git add 将更改添加到暂存区,然后用 git commit 提交更改。
- 提交完成后,git status 应显示 nothing to commit, working tree clean,表明没有待提交的更改。

总结
第一篇还是不要搞那么多,下次会为大家带来git的版本回退和撤销修改等精彩内容
相关文章:
版本控制器Git(1)
文章目录 前言一、初识Git问题引入解决方案注意事项 二、Git安装三、Git配置与基本操作Git创建Git配置用户名称和地址认识工作区、暂存区、版本库添加文件到仓库添加文件到暂存区提交暂存区内容到本地仓库 查看提交历史 四、Git 暂存区、HEAD、对象库及文件Git内部结构概览查看…...
推理模型对SQL理解能力的评测:DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet
引言 随着大型语言模型(LLMs)在技术领域的应用日益广泛,评估这些模型在特定技术任务上的能力变得越来越重要。本研究聚焦于四款领先的推理模型——DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet在SQL理解与分析方面的能力,…...
[动手学习深度学习]12.权重衰退
1.介绍 权重衰退是常见的处理过拟合的方法 控制模型容量方法 把模型控制的比较小,即里面参数比较少使参数选择范围小 约束就是正则项 每个特征的权重都大会导致模型复杂,从而导致过拟合。 控制权重矩阵范数可以使得减少一些特征的权重,甚至…...
JavaEE_多线程(二)
目录 1. 线程的状态2. 线程安全2.1 线程不安全问题的原因 3. 线程安全中的部分概念3.1 原子性3.2 可见性3.3 指令重排序 4. 解决线程安全问题4.1 synchronized关键字4.1.1 可重入4.1.2 synchronized使用 4.2 volatile关键字4.2.1 volatile使用 5. wait和notify5.1 wait()方法5.…...
【unity小技巧】分享vscode如何进行unity开发,且如何开启unity断点调试模式,并进行unity断点调试(2025年最新的方法,实测有效)
文章目录 前言一、前置条件1、已安装Visual Studio Code,并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号],2、在Visual Studio Code扩展中搜索Unity,并安装3、同时注意这个插件下面的描述,需要根…...
【Hadoop】详解HDFS
Hadoop 分布式文件系统(HDFS)被设计成适合运行在通用硬件上的分布式文件系统,它是一个高度容错性的系统,适合部署在廉价的机器上,能够提供高吞吐量的数据访问,非常适合大规模数据集上的应用。为了做到可靠性,HDFS创建了…...
Spring(4)——响应相关
一、返回静态页面 1.1**RestController和Controller** 想返回如下页面: 如果我们依旧使用原来的**RestController** 可以看到的是仅仅返回了字符串。 此时将**RestController改为Controller** 可以看到这次返回的是html页面。 那么**RestController和Controller…...
axure11安装教程包含下载、安装、汉化、授权(附安装包)图文详细教程
文章目录 前言一、axure11安装包下载二、axure11安装教程1.启动安装程序2.安装向导界面3.安装协议协议页面2.选择安装位置3.开始安装4.完成安装 三、axure11汉化教程1.axure11汉化包2.axure11汉化设置 四、axure11授权教程1.打开axure112.设置使用方式3.输入许可证号4.axure11安…...
如何注册海外社媒平台账号
在数字贸易时代,社媒平台已成为外贸企业触达全球客户的战略要地。数据显示,2023年全球B2B采购决策者中,87%通过社媒渠道完成供应商初筛。本文深度解析主流平台的运营规则与技术方案,构建覆盖获客转化全链路的数字化营销体系。 一…...
Python IO编程-序列化
目录 JSON JSON进阶 练习 在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d dict(nameBob, age20, score88)可以随时修改变量,比如把name改成Bill,但是一旦程序结束,变量所…...
Redis-缓存穿透击穿雪崩
1. 穿透问题 缓存穿透问题就是查询不存在的数据。在缓存穿透中,先查缓存,缓存没有数据,就会请求到数据库上,导致数据库压力剧增。 解决方法: 给不存在的key加上空值,防止每次都会请求到数据库。布隆过滤器…...
Windows server网络安全
摘要 安全策略 IP安全策略,简单的来说就是可以通过做相应的策略来达到放行、阻止相关的端口;放行、阻止相关的IP,如何做安全策略,小编为大家详细的写了相关的步骤: 解说步骤: 阻止所有: 打…...
代理(Delegate)、闭包(Closure)、Notification(通知中心) 和 swift_event_bus适用场景和工作方式
在 Swift 开发中,在 Swift 开发中,代理(Delegate)、闭包(Closure)、Notification(通知中心) 和 swift_event_bus 主要用于 组件之间的通信,但它们的适用场景和工作方式有…...
Python从入门到精通1:FastAPI
引言 在现代 Web 开发中,API 是前后端分离架构的核心。FastAPI 凭借其高性能、简洁的语法和自动文档生成功能,成为 Python 开发者的首选框架。本文将从零开始,详细讲解 FastAPI 的核心概念、安装配置、路由设计、请求处理以及实际应用案例&a…...
使用 crontab 定时同步服务器文件到本地
https://www.dong-blog.fun/post/1987 1. 安装 sshpass sshpass 是一个可以自动输入密码的工具。如果未安装,运行以下命令安装: • 对于 Debian/Ubuntu 系统: apt update && apt install sshpass• 对于 CentOS/RHEL 系统…...
Leetcode做题记录----2
1、两数之和 思路: 1、不能使用相同元素,可以想到哈希表,,C#中可以通过字典建立当前值和下标的关系 2、显然,依次判断数组中的每个数即可 3、定义other target - num[ i ] 这个other就是我们用于在字典中进行寻找…...
批量合并 Word 文档,支持合并成一个 Word,也支持按文件夹合并
我们经常会碰到需要将多个 Word 文档批量合并成一个 Word 文档的场景,比如需要合并后打印、合并后方便整理存档等等。如果是人工的操作,会非常的麻烦。因此我们通常会借助一些批量处理脚本或者寻找批量处理的工具来帮我们实现批量合并 Word 文档的操作。…...
项目实操分享:一个基于 Flask 的音乐生成系统,能够根据用户指定的参数自动生成 MIDI 音乐并转换为音频文件
在线体验音乐创作:AI Music Creator - AI Music Creator 体验者账号密码admin/admin123 系统架构 1.1 核心组件 MusicGenerator 类 负责音乐生成的核心逻辑 包含 MIDI 生成和音频转换功能 管理音乐参数和音轨生成 FluidSynth 集成 用于 MIDI 到音频的转换 …...
神经网络为什么要用 ReLU 增加非线性?
在神经网络中使用 ReLU(Rectified Linear Unit) 作为激活函数的主要目的是引入非线性,这是神经网络能够学习复杂模式和解决非线性问题的关键。 1. 为什么需要非线性? 1.1 线性模型的局限性 如果神经网络只使用线性激活函数&…...
RK3568平台(音频篇)AD82584F功放
一.AD82584 功放芯片简介 AD82584 是 Analog Devices 公司推出的一款高性能、多通道音频功率放大器芯片。 它专为汽车音响系统、家庭影院和其他需要高质量音频放大的应用而设计。以下是关于 AD82584 的详细介绍。 Analog Devices 官方网站:https://www.analog.com AD82584…...
动态规划详解(二):从暴力递归到动态规划的完整优化之路
目录 一、什么是动态规划?—— 从人类直觉到算法思维 二、暴力递归:最直观的问题分解方式 1. 示例:斐波那契数列 2. 递归树分析(以n5为例) 3. 问题暴露 三、第一次优化:记忆化搜索(Memoiza…...
ubuntu下在pycharm中配置已有的虚拟环境
作者使用的ubuntu系统位于PC机上的虚拟机。系统版本为: 在配置pycharm解释器之前你需要先创建虚拟环境以及安装pycharm。 作者创建的虚拟环境位于/home/topeet/miniconda3/envs/airproject/,如下图所示: 作者安装的pycharm版本为2023社区…...
虚幻基础:动画层接口
文章目录 动画层:动画图表中的函数接口:名字,没有实现。动画层接口:由动画蓝图实现1.动画层可直接调用实现功能2.动画层接口必须安装3.动画层默认使用本身实现4.动画层也可使用其他动画蓝图实现,但必须在角色蓝图中关联…...
deepseek R1提供的3d迷宫设计方案
一、技术选型方案 核心渲染技术 🎨 采用Raycasting算法模拟3D透视效果使用Canvas 2D上下文进行逐像素绘制材质贴图系统实现墙面差异化表现 迷宫数据结构 🗺️ 二维数组存储迷宫布局(0:通路,1:墙体)递归回溯算法生成随…...
2024华为OD机试真题-日志排序(C++/Java/Python)-E卷-100分
2024华为OD机试最新E卷题库-(C卷+D卷+E卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 示例1 示例2 示例3 解题思路 代码 c++ python Java 题目描述 运维工程师采集到某产品现网运行一天产生的日志N条,现需根据日志时间按时间先后顺序对日志进行排序。…...
爬虫中一些有用的用法
文本和标签在一个级别下 如果文本和a标签在一个级别下 比如: # 获取a标签后的第一个文本节点text_node a.xpath(following-sibling::text()[1])[0].strip() 将xpath的html代码转换成字符串 etree.tostring(root, pretty_printTrue, encoding"utf-8")…...
Python控制语句-条件分支-if
1.以下代码的输出结果是()。 for i in range(1,6): if i%4= =0: continue else: print(i, end=“,”) A、1,2,3 B、1,2,3,4 C、1,2,3,5, D、1,2,3,5,6 答案:C。for循环依次将1-6依次赋给i,i从1,2,3,4,5依次变化,当i%4= =0时,结束本次循环进入下一循环;反之输出的值,故输出…...
DeepIn Wps 字体缺失问题
系统缺失字体 Symbol 、Wingdings 、Wingdings2、Wingdings3、MT—extra 字体问题 问了下DeepSeek 在应用商店安装或者在windows 里面找 装了一个GB-18030 还是不行 在windows里面复制了缺失的字体 将字体复制到DeepIn 的字体目录(Ubuntu 应该也是这个目录&am…...
【webrtc debug tools】 rtc_event_log_to_text
一、rtc_event_log 简介 在学习分析webrtc的过程中,发现其内部提供了一个实时数据捕获接口RtcEventLog。通过该接口可以实时捕获进出webrtc的RTP报文头数据、音视频配置参数、webrtc的探测数据等。其内容实现可参考RtcEventLogImpl类的定义。其文件所在路径 loggin…...
数字IC后端项目典型问题(2025.03.10数字后端项目问题记录)
小编发现今天广大学员发过来的问题都比较好,立即一顿输出分享给大家(每天都有好多种类的数字后端问题)。后续可能会经常通过这种方式来做分享。其实很多问题都是实际后端项目中经常遇到的典型问题。希望通过这种方式的分享能够帮助到更多需要…...
