news 2026/9/2 5:51:26

Git入门:从版本管理到本地仓库基本操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Git入门:从版本管理到本地仓库基本操作

个人主页:小则又沐风


个人专栏:
• [数据结构]
• [竞赛专栏]
• [C语言]
• [C++]
• [Linux]
• [OJ项目]
• [MySQL]

•[GIT]

前言

什么是GIT

现在我们假想一个场景:

实验课的老师布置了一个作业——写一份实验报告。

我们很快写完了第一版,并把实验报告交给老师查看。

老师看完后说:“这里还有一些地方需要修改。”

于是我们直接在原来的实验报告上进行修改,得到了第二版

我们拿着第二版去找老师,结果老师还是不满意。

没办法,我们继续修改,又得到了第三版

这时候老师突然说:“其实你第二版里面有些内容写得挺好的,你把第二版和现在这一版结合一下。”

问题来了:

我们现在手里只有第三版,第二版早就被覆盖掉了。

没办法,我们只能凭借“超强的记忆力”,努力回忆第二版写了什么,然后重新修改出第四版。

好不容易写完,老师看了一圈又来了一句:

“看来看去,我感觉还是第一版最好,你把第一版交给我吧。”

此时的我们:崩溃。

为什么会崩溃?

因为从第一版到第四版,我们一直在直接修改同一份文件,却没有保存每一次修改之前的版本。

于是下一次写实验报告的时候,我们学聪明了。

每次修改之前,都先把当前的实验报告备份一份,同时记录:

  • 这是第几个版本;
  • 这个版本修改了什么;
  • 修改时间是什么时候。

这样一来:

实验报告_v1.docx 最初版本 实验报告_v2.docx 修改实验步骤 实验报告_v3.docx 修改实验结果 实验报告_v4.docx 合并第二版部分内容

老师再说:

“把第二版给我看看。”

我们直接把实验报告_v2.docx拿出来就行了。

老师说:

“还是第一版好。”

也没问题,直接找到实验报告_v1.docx

那么,我们刚刚做的这一系列操作是什么?

这其实就是最简单、最原始的版本管理。

而 Git 要解决的问题,本质上和这个例子非常相似。

只不过我们不再需要手动创建:

项目_v1 项目_v2 项目_v3 项目_最终版 项目_最终版2 项目_真的最终版 项目_打死不改版

Git 会帮助我们更加系统地记录每一次修改,并在需要的时候找到或恢复到之前的版本

GIT基本操作

1.创建Git本地仓库

对我们的文件进行版本控制的时候,首先需要的就是创建出一个本地仓库.

git init
ls -a . .. .git

当我们创建出一个本地仓库之后,这个目录下就会出现一个隐藏的文件----.git

这个文件就是进行对我们的文件进行管理的.

2.配置Git

当安装Git后⾸先要做的事情是设置你的⽤⼾名称和e-mail地址,这是⾮常重要的。

git config [--global] user.name "Your Name" git config [--global] user.email "email@example.com" # 把 Your Name 改成你的昵称 # 把 email@example.com 改成邮箱的格式,只要格式正确即可。
#查看自己的配置 git config -l

如果我们上面添加了--global的选项的话,我们下次创建本地仓库的时候我们就不需要再次进行配置了.

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

现在我们只是知道这个Git是可以控制我们的文件的,但是具体我们需要怎么使用这个Git呢?

touch ReadMe

我们在这个目录下创建出一个文件,那么Git是不是就可以对这个文件进行控制了呢???
并不是的.

因为管理起来的文件都是在.git中的.

那么是不是我们把自己的文件move到.git中就可以了.

这是严重不允许的操作,这样操作可能导致.git中的配置文件等重要文件出现错误.

在使用Git进行把版本控制之前,我们需要认识⼯作区、暂存区、版本库.

工作区

工作区就是我们进行编写代码的地方.

例如我们刚才创建的ReadMe文件.我们就可以在工作区进行编写文件的内容.

暂存区

什么是暂存区?

把我们写的文件及逆行提交之后,我们的文件会出现在暂存区,暂存区就是暂时存储的地方.

通俗的理解就是暂存区就是我们的写好的作业我们现在交给了课代表等待提交给老师.

版本库

这个就是我们真正需要提交到的地方了

那么怎么将我们的文件添加到暂存区呢?

我们需要的就是这个命令

git add [文件名称]
cat ReadMe hello git

首先在这个文件中写一点内容.

git add ReadMe

怎么将文件提交到版本库中呢?

git commit -m "message"

这个message就是用来描述你的这一次的提交的.

git commit -m "create ReadME" [master (root-commit) dbafa28] create ReadME 1 file changed, 1 insertion(+) create mode 100644 ReadMe
怎么新增代码

刚才我们的操作就是新增了代码.

操作的步骤就是在工作区把我们的新增的代码进行填写.

然后进行git add

最后进行给git commit

怎么删除代码

删除代码就是在工作区删除代码然后进行add和commit

git log --oneline dbafa28 (HEAD -> master) create ReadME git show dbafa28 commit dbafa280f893a1543c31a18aae41098f520909d8 (HEAD -> master) Author: jzxmorning <3060150485@qq.com> Date: Mon Aug 31 21:23:37 2026 +0800 create ReadME diff --git a/ReadMe b/ReadMe new file mode 100644 index 0000000..399e5b3 --- /dev/null +++ b/ReadMe @@ -0,0 +1 @@ + hello git

现在我们通过log信息知道我们的代码的确是上传到版本库中的.

现在我们进行删除代码

vim ReadMe git add ReadMe git commit -m "delete" [master f9d6986] delete 1 file changed, 1 insertion(+), 1 deletion(-) git log --oneline f9d6986 (HEAD -> master) delete dbafa28 create ReadME ubuntu@VM-0-7-ubuntu:~/gitcode$ git show f9d6986 commit f9d698676481cfb0f7965323ee30eccdc63f558a (HEAD -> master) Author: jzxmorning <3060150485@qq.com> Date: Mon Aug 31 21:32:22 2026 +0800 delete diff --git a/ReadMe b/ReadMe index 399e5b3..8b13789 100644 --- a/ReadMe +++ b/ReadMe @@ -1 +1 @@ - hello git + git show f9d6986:ReadMe

我们可以看到我们删除之后版本库中的文件内容的确是修改成为了空.

怎么删除文件

删除文件操作就是

touch file1 git add file1 git commit -m "file1"

我们将要删除的文件就是这个文件.

rm -f file1 git add file1 git commit -m "delete"

这样我们就把我们的文件删除了

但是也可以直接进行删除

git rm -f [文件名称] git commit -m "message"
版本回退

我们在最开始讲解的时候就告诉大家这个Git是一个版本管理器.

那么我们怎么才能做到版本回退呢?

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

这个命令就可以回到我们想要的版本了.

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

现在我们来模拟一下

git log --oneline 803c5ad (HEAD -> master) add version3 20e6464 add version2 6cea718 add version1 e9fe0cc delete 9756068 file1 f9d6986 delete dbafa28 create ReadME

我们在ReadMe文件中修改了文件内容,并且提交了三次版本.

现在我们想要回到第二个版本怎么操作呢?

首先我们需要知道的是我们是想要得到什么样的回退.

假设我们需要工作区的版本也回退.

git reset --hard 20e6464 HEAD is now at 20e6464 add version2 cat ReadMe version 1 version 2

那么我们反悔了,我们可以回到版本三的状态吗?

可以的可以的

但是是有条件的我们必须知道版本三的commit ID

git reset --hard 803c5ad HEAD is now at 803c5ad add version3 cat ReadMe version 1 version 2 version 3

HEAD 说明:

可直接写成commitid,表⽰指定退回的版本

HEAD表⽰当前版本

HEAD^上⼀个版本

HEAD^^上上⼀个版本

以此类推...

撤销修改

使用场景:

我们在写代码的时候,写了很久,但是发现自己的代码写的是很低级的代码,想要撤销自己刚才写的代码.

情况一:工作区的代码,没有add

当然的,我们可以凭借自己的超强记忆,来找到自己修改的代码,直接删除就行了.

但是这样做难免有点麻烦并且容易出现Bug

那么有什么更加简单的办法吗?

有的有的

git checkout -- [file]

让⼯作区的⽂件回到最近⼀次add 或commit 时的状态

cat ReadMe version 1 version 2 version 3 I am coding...
git checkout -- ReadMe cat ReadMe version 1 version 2 version 3
情况二:已经add但是没有commit

现在我们先来创建一个这样的场景.

cat ReadMe version 1 version 2 version 3 i am coding..... (add) git add .

首先我们可以知道的我们的工作区和暂存区都是有我们的代码的.只有版本库没有我们的代码.

所以我们的选择有两个:

  1. 利用版本回退将暂存区的代码回退到和版本库一致的版本.然后之后就是情况一了
  2. 直接版本回退选择hard
git reset HEAD ReadMe Unstaged changes after reset: M ReadMe git log --oneline 803c5ad (HEAD -> master) add version3 20e6464 add version2 6cea718 add version1 e9fe0cc delete 9756068 file1 f9d6986 delete dbafa28 create ReadME git checkout -- ReadMe cat ReadMe version 1 version 2 version 3
情况三:对于已经commit

对于这种情况我们选择的操作就是版本回退了

cat ReadMe version 1 version 2 version 3 i am coding... (commit) git add . git commit -m "coding"
git log --oneline 9bc87da (HEAD -> master) coding 803c5ad add version3 20e6464 add version2 6cea718 add version1 e9fe0cc delete 9756068 file1 f9d6986 delete dbafa28 create ReadME git reset --hard 803c5ad HEAD is now at 803c5ad add version3 cat ReadMe version 1 version 2 version 3
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 5:49:41

游戏模型替换技术实践:从原理到避坑的完整指南

你打开游戏&#xff0c;准备继续推进主线&#xff0c;却发现某个关键角色的立绘、语音甚至剧情表现&#xff0c;都变成了另一个毫不相干的人物。这不是你眼花&#xff0c;也不是游戏更新了隐藏彩蛋&#xff0c;而是一种在特定玩家圈子里流传的“魔改”操作。今天要聊的&#xf…

作者头像 李华
网站建设 2026/9/2 5:48:45

从零构建桌面AI助手:基于LangChain Agent与PySide6的完整实战指南

最近在探索桌面端AI助手时&#xff0c;发现很多工具要么功能单一&#xff0c;要么交互复杂。一个集成了多模态交互、本地知识库和自动化工作流的新一代桌面AI助手&#xff0c;对于提升开发效率和日常办公体验来说&#xff0c;潜力巨大。本文将以一个功能演示项目为例&#xff0…

作者头像 李华
网站建设 2026/9/2 5:47:25

基于Mongoose OS与Arduino兼容层实现ESP32 CAN总线通信

简介&#xff1a;本资源是一套面向嵌入式开发工程师与物联网系统学习者的ESP32 CAN总线通信实战项目&#xff0c;聚焦于在Mongoose OS环境下绕过官方Arduino兼容层、直接集成ESP32 Arduino核心库实现高可靠性CAN通信&#xff0c;适用于工业现场数据采集、车载诊断&#xff08;O…

作者头像 李华
网站建设 2026/9/2 5:46:52

手搓EDA软件:原理图编辑器从数据模型到网表导出的完整实现

这次我们来看一个硬核又有点“极客浪漫”的项目&#xff1a;手搓 EDA 软件。上一期汇报演出了什么先不管&#xff0c;这次聚焦在原理图编辑器上。所谓手搓&#xff0c;就是不走成熟开源框架的现成路线&#xff0c;从数据结构、图形交互、网络连接、物料清单这些底层逻辑开始&am…

作者头像 李华
网站建设 2026/9/2 5:46:12

MTK平台Android原生支持USB摄像头补丁详解

简介&#xff1a;本资源是面向Android系统开发工程师与MTK平台定制开发者的技术补丁包&#xff0c;旨在解决USB摄像头在原生Camera API中无法像MIPI摄像头一样被直接调用的兼容性难题&#xff0c;无需依赖libuvc即可实现Google相机等应用对USB摄像头的无缝支持。压缩包共155个文…

作者头像 李华
网站建设 2026/9/2 5:45:33

Codex 不是安装包!详解 CLI 安装、配置与常见报错排查

下载 Codex 时&#xff0c;最容易被误导的一件事就是去搜索“Codex 安装包”。我现在可以直接告诉你结论&#xff1a;Codex 不是一个靠安装包安装的软件&#xff0c;它主要通过命令行工具分发&#xff0c;正确的下载方式是使用包管理器或官方发布渠道。如果你正在到处找安装包&…

作者头像 李华