Git篇(一): 读懂 Git:从 Linux 安装到底层目录、版本回退完整拆解

📅 2026/7/2 19:59:00 👁️ 阅读次数 📝 编程学习
Git篇(一): 读懂 Git:从 Linux 安装到底层目录、版本回退完整拆解

如果说代码是程序员的作品,那 Git 就是守护作品的“时光机”与“协作桥”。日常开发中,我们反复修改代码、迭代功能、修复 bug,一旦出错需要回溯版本、多人协作需要合并代码、项目迭代需要区分不同版本,没有专业工具加持,只会陷入“代码备份1、备份2、最终版、最终版真不改了”的混乱困境。Git 的诞生,就是为了解决所有版本管理与协作难题。它无需复杂配置,轻便高效,既能帮个人开发者精准记录每一次代码变更,随时回溯任意版本;也能支撑大型团队多人并行开发,高效解决代码冲突、同步迭代进度。不管是编程初学者,还是入行不久的开发者,掌握 Git 都是提升编程素养、适配开发工作的第一步。

一.安装Git

Git 是开放源代码的代码托管工具,最早是在Linux下开发的。开始也只能应用于Linux平台,后面慢慢的被移植到windows下,现在,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行了。

1.Linux-Centos下安装

sudo yum install -y git

可以输入命令

git --version

来查看git的版本

2.Linux-Ubuntu下安装

sudo apt-get install git -y
​ git --version //查看版本

二.Git基本操作

1.创建Git仓库

要提前说的是,仓库是进行版本控制的一个文件目录。我们要想对文件进行版本控制,就必须先创建一个仓库出来

git init //初始化仓库

出现以上内容之后,就说明本地仓库已经创建完成了

1..git文件是什么

.git 是 Git本地仓库的核心数据库文件夹存储项目全部提交历史、分支与远程配置,支撑所有版本管理功能,一旦删除则所有版本记录丢失,项目变为普通文件夹。

2.配置Git

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

--global是配置全局Git环境‌(所有的仓库都会被配置),如果不加--global只会在当前目录下配置

1.查看配置命令

​ git config -l //查看全局配置 git config --local --list // 查看当前仓库

2.删除配置

git config [--global] --unset user.name git config [--global] --unset user.email

3.重置配置

​ # 重置当前仓库的user.name、user.email,换成你要重置的配置项即可 git config --unset user.name git config --unset user.email # 加上--global参数即可,比如重置全局的user.name git config --global --unset user.name git config --global --unset-all user.name git config --local --unset-all //清空‌当前本地仓库‌的所有配置 git config --global --unset-all //清空‌全局Git‌的所有配置

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

  • 工作区:是在电脑上你要写代码或文件的目录
  • 暂存区:英文叫 stage 或 index。一般存放在.git目录下的 index 文件(.git/index)中,我们把暂存区有时也叫作索引(index)。
  • 版本库:又名仓库,英文名repository。工作区有一个隐藏目录.git它不算工作区,而是 Git 的版本库。这个版本库里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

下面这个图展示了工作区、暂存区和版本库之间的关系:

  • 在创建 Git 版本库时,Git 会为我们自动创建一个唯一的 master 分支,以及指向master 的一个指针叫 HEAD。(分支和HEAD的概念后面再说)
  • 当对工作区修改(或新增)的文件执行git add命令时,暂存区目录树的文件索引会被更新。
  • 当执行提交操作git commit时,master 分支会做相应的更新,可以简单理解为暂存区的目录树才会被真正写到版本库中。

1.添加文件

1.add

在包含.git的目录下新建一个 ReadMe 文件,我们可以使用git add命令可以将文件添加到暂存区:

ReadMe(也译作自述文件)是软件开发、项目工程中位于项目根目录,用来介绍说明项目信息的入口文档,核心作用是帮助使用者快速了解、上手该项目。

添加一个或多个文件到暂存区:git add [file1] [file2] ... 添加指定目录到暂存区,包括子目录:git add [dir] 添加当前目录下的所有文件改动到暂存区:git add .

2.commit

再使用git commit命令将暂存区内容添加到本地仓库中:

提交暂存区全部内容到本地仓库中: git commit -m "message" 提交暂存区的指定文件到仓库区:git commit [file1] [file2] ... -m "message"

注意git commit后面的-m选项,要跟上描述本次提交的message,由用户自己完成,这部分内容绝对不能省略,并要好好描述,是用来记录你的提交细节,是给我们人看的。

1.查看文件状态

如果仓库中的文件和我们工作区的文件不同,如何查看当前仓库的状态呢?git status命令用于查看在你上次提交之后是否有对文件进行再次修改。

git status
2.查看文件新增内容

通过上面操作我们只知道哪个文件被修改,但是并不知道文件修改的内容是什么

git diff 文件名 //查看文件修改内容
3.查看历史提交记录
git log git log --pretty=oneline //行显示 更美观

观察版本库变化

2.Git管理文件的本质

值得注意是Git追踪的是修改的内容,而不是文件

四.认识.git文件中的主要内容

1.index

index就是我们的暂存区,add 后的内容都是添加到这里的,暂存区负责暂存接下来要提交到版本库的内容,是Git分层管理提交流程的关键一步。

2.HEAD

HEAD:它是Git的当前版本指针,通常默认指向当前本地仓库的当前分支(默认分支一般是master),通过HEAD可以确定当前工作区基于哪个版本,提交后HEAD会自动移动指向最新的提交

3.objects

objects为 Git 的对象库,里面包含了创建的各种版本库对象及内容。当执行git add命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,就位于".git/objects"目录下

查找 object 时要将 commit id 分成2部分,其前2位是文件夹名称,后38位是文件名称。

git cat-file -p <commit id>

五.版本回退

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

执行git reset命令用于回退版本,可以指定退回某一次提交的版本。要解释一下 “回退” 本质是要将版本库中的内容进行回退,工作区或暂存区是否回退由命令参数决定

git reset [--soft | --mixed | --hard] [HEAD]
  • --mixed默认选项,使用时可以不用带该参数。该参数将暂存区的内容退回为指定提交版本内容,工作区文件保持不变。不带文件名:版本库 HEAD、暂存区,工作区不动 ;带文件名:只操作暂存区,完全不动版本库 HEAD
  • --soft参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本
  • --hard参数将暂存区与工作区都退回到指定版本。切记工作区有未提交的代码时不要用这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了,所以使用该参数前一定要慎重。

HEAD 说明:

可直接写成 commit id,

表示指定退回的版本

HEAD/HEAD~0 表示当前版本

HEAD^ /HEAD~1 上一个版本

HEAD^^ /HEAD~2上上一个版本

以此类推...

查看本地所有HEAD变动日志

git reflog

1.仅回退工作区内容

git checkout -- 文件名

这个命令是丢弃文件在工作区的所有未提交修改,将这个文件还原成版本库中当前HEAD指向的版本内容,命令执行成功就说明已经完成了文件还原。

2.仅回退版本库内容

git reset --soft HEAD^

2.回退工作区和暂存区内容

git reset (--mixed) HEAD 文件名

3.回退工作区、暂存区、版本库内容(慎用)

git reset --hard HEAD^

六.删除文件

1.第一种情况

在 Git 中,删除也是一个修改操作,我们实战一下,如果要删除 file5 文件,怎么搞呢?如果你这样做了:

对于这种情况该如何解决呢?

我们只删除了工作区的文件。这时就需要使用 git rm 将文件从暂存区和工作区中删除,并且 commit:

git rm 文件名

2.第二种情况

如果是误删,(删除也是修改)

git checkout -- 文件名