深入 Git:它是如何记录世界的(一)

目录

[一、初始 Git](#一、初始 Git)

[1.1. 核心痛点](#1.1. 核心痛点)

[1.2. 解决方案](#1.2. 解决方案)

[1.3. Git 定位](#1.3. Git 定位)

[二、Git 的安装](#二、Git 的安装)

[三、Git 的基本操作](#三、Git 的基本操作)

[3.1. 创建本地仓库](#3.1. 创建本地仓库)

[3.2. 配置本地仓库](#3.2. 配置本地仓库)

[3.3. 三大核心区域(Git 操作核心原理)](#3.3. 三大核心区域(Git 操作核心原理))

[3.4. 添加文件到本地仓库](#3.4. 添加文件到本地仓库)

[3.5. 修改文件](#3.5. 修改文件)

[3.6. 版本回退](#3.6. 版本回退)

[3.7. 撤销修改](#3.7. 撤销修改)

[3.8. 删除文件](#3.8. 删除文件)


一、初始 Git

1.1. 核心痛点

编写文档、代码时,需手动复制多版本副本(如报告 - v1、最终版),版本数量增多后,无法清晰记住各版本的修改内容,文件管理极度混乱。

1.2. 解决方案

版本控制器:可记录文件的每一次改动、版本迭代,追踪文件历史与发展过程,同时支持多人协同作业。

1.3. Git 定位

Git 是目前最主流的版本控制器,能管理电脑上所有格式的文件,是开发人员管理项目源代码的核心工具。

二、Git 的安装

Git 是开源跨平台版本控制工具,支持Linux、Unix、Mac、Windows,最初为 Linux 开发,后续移植到 Windows 平台。

bash 复制代码
-- 安装
sudo yum install git -y
-- 验证
git --version

安装后,所有平台均通过 git --version 命令查看版本号,确认安装成功。

bash 复制代码
git --version

三、Git 的基本操作

Git 基本操作围绕本地仓库展开,核心是工作区→暂存区→版本库的文件流转,包含仓库创建、配置、文件增删改查、版本回退、撤销修改、文件删除等核心操作。

3.1. 创建本地仓库

bash 复制代码
-- 核心命令
-- 在目标文件目录下执行
git init

创建好之后,我们使用 ls -a 命令会发现该目录下会存在一个 .git文件夹,是 Git 跟踪管理仓库的核心目录,禁止手动修改。

3.2. 配置本地仓库

配置用户名称和邮箱,用于标识提交者身份,分全局配置和仓库级配置。

bash 复制代码
-- 配置用户名
git config --global user.name name
-- 配置邮箱
git config --global user.email exmaple@email.com
-- 查看配置
git config -l
-- 删除配置
git config --global --unset user.name
git config --global --unset user.email

如果去掉 --global,则仅在当前仓库生效。

3.3. 三大核心区域(Git 操作核心原理)

  1. 工作区:电脑上编写代码 / 文件的目录,直接编辑的文件都在工作区。
  2. 暂存区(stage/index):存放在 .git/index 文件中,git add 后的文件会存入这里。
  3. 版本库(repository):.git 文件夹,包含暂存区、分支、提交记录等所有版本数据,git commit后文件存入版本库。
  4. 工作区修改 → git add → 暂存区 → git commit → 版本库。

首先,我们在工作区对文件进行编辑和修改,这些改动仅存在于本地文件系统中,Git 尚未对其进行记录。随后通过 git add 命令,工作区中需要提交的文件的修改状态和索引存到暂存区,相当于告诉 Git:"这些修改我确认要提交了,先帮我暂存起来,等下统一提交"。最后当所有准备好的修改都暂存完毕后,执行 git commit 命令,暂存区中的所有文件的修改状态和索引会被打包成一个带有提交信息的新版本,正式写入版本库的当前分支中,此时版本库的 master 分支指针和 HEAD 指针会同步移动到这个新的提交节点上,让修改成为项目永久历史的一部分。HEAD 是 Git里的"当前指针",作用是永远指向当前正在工作的分支的最新提交,当我们提交新代码、切换分支、回退版本时,HEAD 会跟着移动,告诉 Git:"我现在工作在哪个版本上"。

3.4. 添加文件到本地仓库

bash 复制代码
# 添加到暂存区
git add 文件名1 文件名2 # 添加单个 / 多个文件
git add 目录名 # 添加整个目录
git add . # 添加所有修改

# 提交到版本库
git commit -m "提交说明"

我们可一多次 git add 不同文件,最后一次 git commit 提交所有暂存内容。-m 后必须加清晰的提交描述,不可省略。

仅 git add 的文件会被 git commit 提交,未 add 的文件仅留在工作区,不会进入版本库。

3.5. 修改文件

Git 跟踪的是修改(增 / 删 / 改内容),而非文件本身,操作流程:

bash 复制代码
git status # 查看文件是否被修改、是否已 add/commit

git diff 文件名 # 工作区 vs 暂存区
git diff HEAD -- 文件名 # 工作区 vs 版本库

diff --git a/ReadMe b/ReadMe 表示对比修改前 (a)和修改后 (b)的 ReadMe 文件。--- a/ReadMe 代表修改前的文件内容;+++ b/ReadMe 代表修改后的文件内容。-1,2 代表旧版本从第 1 行开始,共 2 行;+1,3 新版本从第 1 行开始,共 3 行。

bash 复制代码
# 提交修改
git add ReadMe
git commit -m "Modified ReadMe"
git status

3.6. 版本回退

用于回滚到历史提交版本,核心命令 git reset,配合不同参数控制回退范围。

bash 复制代码
git reset [--soft | --mixed | --hard] [HEAD]

HEAD 标识:HEAD 表示当前版本;HEAD^ 表示上一版本,HEAD^^ 上上版本,HEAD~n 回退 n 个版本。也可直接用 commit id(SHA1 哈希值)指定版本。

--mixed(默认):回退版本库,暂存区同步回退,工作区保留修改;--soft:仅回退版本库,暂存区、工作区均不变;--hard:版本库、暂存区、工作区全部回退(未提交的修改会丢失,慎用)。

git log 仅显示当前版本及之前的记录,回退后看不到新版本 commit id。用 git reflog 查看本地所有操作记录,获取新版本 commit id,再次 git reset --hard 版本号即可恢复。

bash 复制代码
git log --pretty=oneline
git diff HEAD -- ReadMe
git diff ReadMe
git reset --hard HEAD

3.7. 撤销修改

分三种场景,精准撤销工作区 / 暂存区的修改:

  • 仅工作区修改,未 git add
bash 复制代码
# 丢弃工作区修改,恢复到最近一次 add/commit 的状态
git checkout -- 文件名
bash 复制代码
git checkout -- ReadMe
cat ReadMe
  • 已 git add,未 git commit
bash 复制代码
git reset HEAD 文件名 # 撤销暂存区修改,回到工作区
git checkout -- 文件名 # 丢弃工作区修改
bash 复制代码
git add ReadMe
git status
git reset HEAD ReadMe
git checkout -- ReadMe
  • 已 git commit,未推送到远程
bash 复制代码
git reset --hard HEAD^ # 回退到上一版本
bash 复制代码
git add ReadMe
git commit -m "push to remote"
git reset --hard HEAD^

3.8. 删除文件

删除也是一种修改,分误删恢复和彻底删除两种情况:

  • 误删文件(工作区删除,想恢复)
bash 复制代码
git checkout -- 文件名 # 从版本库恢复文件到工作区
  • 彻底删除(从版本库移除文件)
bash 复制代码
git rm 文件名 # 删除工作区 + 暂存区文件
git commit -m "删除文件" # 提交删除操作到版本库
bash 复制代码
git rm file3
git commit -m "delete file3"
git status
相关推荐
华科大胡子3 小时前
Git Submodule深度避坑指南
git
花开花落为谁愁5 小时前
Git核心命令速查表
大数据·git·elasticsearch
雨声不在5 小时前
家用小GIT
git
雨声不在5 小时前
mac-intel安装git-lfs
git·elasticsearch·macos
习惯就好zz16 小时前
Git 交互式 rebase 实战:将后续修改合并到历史提交
git
南棱笑笑生1 天前
20260429给万象奥科的开发板HD-RK3576-PI适配瑞芯微原厂的Android14时删除全部的.git目录
git·rockchip
tsyjjOvO1 天前
【Git 从入门到实战】(IDEA+Gitee 版)
git·gitee·idea
你知道“铁甲小宝”吗丶1 天前
git推送到多平台(gitee/github)
git·gitee·github
bksczm1 天前
Linux之基础开发工具之git
git