Git 入门之道:从版本流转到基础操作

一:git概述

Git 本质上就是版本控制系统

Git 可以管理电脑上的大部分文件,比如:

bash 复制代码
.cpp
.h
.txt
.md
.html
.css
.js
.doc
图片
视频

其中,文本文件git可以知道你到底改了哪一行?

而,二进制文件git大概知道你的文件的大小的变化.

二:创建代码仓库的基本步骤

1.创建文件夹

首先在;linux机器里面创建一个文件夹gitcode

2.git init

进入文件夹,紧接着对git进行初始化

3.配置用户名和邮箱

有俩方式,一个是给当前仓库配置,还有一个是给全局配置

我的理解就是,如果你在当前仓库配置了用户名和邮箱,那么就用这个,如果你配置了全局,这个时候就用就近的.

就近原则

局部创建与查看

bash 复制代码
git config user.name "xxx"
git config user.email "xxxxxx"

git config -l

全局创建与查看

bash 复制代码
git config --global user.name "xxxxx"
git config --global user.email "xxxxx"

git config --global -l

4.删除配置

删除当前仓库配置:

bash 复制代码
git config --unset user.name
git config --unset user.email

删除全局配置:

bash 复制代码
git config --global --unset user.name
git config --global --unset user.email

注意:

git config --global 设置的,就要用 git config --global --unset 删除。

三:工作区、暂存区、版本库

1.git add:添加到暂存区

README.md 加入暂存区:

bash 复制代码
git add README.md

也可以一次性添加当前目录下所有修改:

bash 复制代码
git add .

这两个区别是:

bash 复制代码
git add README.md   # 只添加 README.md
git add .           # 添加当前目录下所有修改

新手阶段可以先多用指定文件:

bash 复制代码
git add README.md

这样不容易把乱七八糟的文件加进去。

查看状态:

bash 复制代码
git status

这时候会看到类似:

bash 复制代码
Changes to be committed:
  new file: README.md

说明文件已经进入暂存区,等待提交。

2.git commit:提交到版本库

提交命令:

bash 复制代码
git commit -m "添加第一个 README 文件"

这里的 -m 是 message 的意思,也就是本次提交说明。

提交说明一定要认真写,不要偷懒 乱写:

因为以后你看历史记录时,要靠这个说明判断每次提交做了什么。

3.git log:查看提交记录

看历史提交:

git log

你会看到类似:

bash 复制代码
commit xxxxxxxxxxxxxxxxxxxxxxxxx
Author: zjh <1234567890@qq.com>
Date:   Sun May 31 16:00:00 2026 +0800

    添加三个测试文件

这里面有几个关键信息:

bash 复制代码
commit id     # 每次提交的唯一编号
Author        # 提交人
Date          # 提交时间
提交说明       # -m 后面写的内容

其中 commit id 是一长串哈希值,不是 1、2、3 这种递增编号。

它长这样:

bash 复制代码
3f4a9c7d8e...

以后版本回退、查看某次提交,都需要用到它。

>简洁查看提交记录

普通的 git log 内容比较多。

可以用:

bash 复制代码
git log --pretty=oneline

或者更常用一点:

bash 复制代码
git log --oneline

输出类似:

bash 复制代码
a1b2c3d 添加三个测试文件
f4e5d6c 添加第一个 README 文件

这个更适合平时快速查看历史版本。

4.基础命令总结

bash 复制代码
# 1. 创建目录
mkdir gitcode
cd gitcode

# 2. 初始化仓库
git init

# 3. 配置用户名和邮箱
git config --global user.name "zjh"
git config --global user.email "12345678990@qq.com"

# 4. 创建文件
echo "hello git" > README.md

# 5. 查看状态
git status

# 6. 添加到暂存区
git add README.md

# 7. 再次查看状态
git status

# 8. 提交到版本库
git commit -m "添加 README 文件"

# 9. 查看提交记录
git log

# 10. 简洁查看提交记录
git log --oneline

图:

命令 作用
git init 初始化本地仓库
ls -a 查看隐藏文件,比如 .git
git config user.name "名字" 配置当前仓库用户名
git config user.email "邮箱" 配置当前仓库邮箱
git config --global user.name "名字" 配置全局用户名
git config --global user.email "邮箱" 配置全局邮箱
git config -l 查看 Git 配置
git config --unset user.name 删除当前仓库用户名配置
git config --global --unset user.name 删除全局用户名配置
touch README.md 创建文件
git status 查看当前仓库状态
git add README.md 添加指定文件到暂存区
git add . 添加当前目录所有修改到暂存区
git commit -m "说明" 提交到版本库
git log 查看详细提交记录
git log --oneline 简洁查看提交记录

四:.git 目录

1.index:暂存区

bash 复制代码
zjh@VM-0-14-ubuntu:~/gitcode$ tree .git/
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── pre-merge-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   ├── push-to-checkout.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

9 directories, 17 files

上述就是git的目录

下面是修改过的目录

bash 复制代码
zjh@VM-0-14-ubuntu:~/gitcode$ vim ReadMe
zjh@VM-0-14-ubuntu:~/gitcode$ git add .
zjh@VM-0-14-ubuntu:~/gitcode$ git commit -m "change ReadMe file"
[master (root-commit) 959af1b] change ReadMe file
 1 file changed, 1 insertion(+)
 create mode 100644 ReadMe
zjh@VM-0-14-ubuntu:~/gitcode$ tree .git/
.git/
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── pre-merge-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   ├── push-to-checkout.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│       └── heads
│           └── master
├── objects
│   ├── 15
│   │   └── b8f2a8ffc8a7789b65fdcf2505f23ea9e4dde0
│   ├── 28
│   │   └── bd2c7b4dbf3b6cbbc348e895531a541837fa8e
│   ├── 95
│   │   └── 9af1be07a65eac1ebd7e1d0d78ebcd17cf0662
│   ├── info
│   └── pack
└── refs
    ├── heads
    │   └── master
    └── tags

15 directories, 25 files

git add 之后,.git 里面会出现一个:index

这个 index 就是 Git 的暂存区。

2.HEAD:当前指针

执行命令:

bash 复制代码
zjh@VM-0-14-ubuntu:~/gitcode$ cat .git/HEAD
ref: refs/heads/master

HEAD 指向 refs/heads/master

refs/heads/master 保存了什么?

执行一下命令:

bash 复制代码
zjh@VM-0-14-ubuntu:~/gitcode$ cat .git/refs/heads/master
959af1be07a65eac1ebd7e1d0d78ebcd17cf0662

这个就是:最新一次提交的 commit id

也就是说:master 文件里面存的是最新提交的 commit id

所以关系是:HEAD → refs/heads/master → 最新 commit id

3.objects:对象库

执行:

bash 复制代码
zjh@VM-0-14-ubuntu:~/gitcode$ tree .git/objects
.git/objects
├── 15
│   └── b8f2a8ffc8a7789b65fdcf2505f23ea9e4dde0
├── 28
│   └── bd2c7b4dbf3b6cbbc348e895531a541837fa8e
├── 95
│   └── 9af1be07a65eac1ebd7e1d0d78ebcd17cf0662
├── info
└── pack

5 directories, 3 files

你会看到很多两位字符命名的目录

Git 的对象通常包括:

commit 对象:保存一次提交的信息
tree 对象:保存目录结构
blob 对象:保存文件内容

4.基础命令

git status:查看当前仓库状态

bash 复制代码
zjh@VM-0-14-ubuntu:~/gitcode$ git status
On branch master
nothing to commit, working tree clean

git diff:查看具体改了什么

bash 复制代码
zjh@VM-0-14-ubuntu:~/gitcode$ git diff ReadMe
diff --git a/ReadMe b/ReadMe
index cf77958..ad251cf 100644
--- a/ReadMe
+++ b/ReadMe
@@ -1,2 +1,3 @@
 hello1
 hello2
+hello3

+ 表示新增
- 表示删除

注意:

git diff 是在你add之前的,如果你add了,那么这个修改就显示不出来了

5,修改文件的标准提交流程

bash 复制代码
git status
git diff README.md
git add README.md
git status
git commit -m "修改 README 文件"
git status

git status        # 看哪些文件变了
git diff          # 看具体改了什么
git add           # 把修改放入暂存区
git status        # 确认已经进入暂存区
git commit -m     # 提交到版本库
git status        # 确认工作区干净

五:版本回退

1.git reset

该命令后面可以分别加:

bash 复制代码
--soft
--mixed
--hard

Git 有三个区域:工作区 暂存区 版本库

reset 本质上一定会影响:版本库 HEAD 指向

但是是否影响工作区、暂存区,取决于参数

1.1 git reset --soft commit_id

区域 是否回退
工作区 不回退
暂存区 不回退
版本库 回退

适合场景:commit 提交错了,但代码还想保留,而且还想保留在暂存区。

1.2. git reset --mixed commit_id

--mixed 是默认选项

区域 是否回退
工作区 不回退
暂存区 回退
版本库 回退

适合场景:commit 提交错了,想取消提交,也想取消 add,但代码还留在工作区。

1.3. git reset --hard commit_id

区域 是否回退
工作区 回退
暂存区 回退
版本库 回退
强制回到某个版本,当前没提交的东西可能直接没了。

1.4.回退到某个历史版本

先查看历史:

bash 复制代码
git log --oneline

假设输出:

bash 复制代码
999cead 修改 README 文件
58abc12 添加 README 文件

如果你想回到:

bash 复制代码
58abc12

执行:

bash 复制代码
git reset --hard 58abc12

然后查看 README.md

bash 复制代码
cat README.md

它就会回到旧版本。

2.HEAD

HEAD:表示当前版本。
HEAD^:表示上一个版本。
HEAD^^:表示上上个版本。

比如回退到上一个版本:

bash 复制代码
git reset --hard HEAD^

3. git reflog

如果你回退之后,执行:

bash 复制代码
git log --oneline

你可能发现之前的提交记录看不到了。

这时候怎么办?

用:

bash 复制代码
git reflog

git reflog 会记录你本地 HEAD 的移动记录,包括:

bash 复制代码
commit
reset
checkout

比如:

bash 复制代码
999cead HEAD@{0}: reset: moving to HEAD^
58abc12 HEAD@{1}: commit: 添加 README 文件
999cead HEAD@{2}: commit: 修改 README 文件

你如果想回到 999cead,可以:

bash 复制代码
git reset --hard 999cead

所以:

bash 复制代码
git log     # 看当前历史
git reflog  # 看你本地操作过的历史

但是注意:

前提是你还能找到那个 commit id。

六:git reflog

所谓撤销修改,就是:我写了一些垃圾代码,不想要了,想恢复到之前干净的状态。

情况一:只改了工作区,还没有 git add

这时候修改只存在于:工作区,它还没有进入暂存区

解决方式:git checkout -- 文件名

注意中间的两个横线:

bash 复制代码
--

因为 checkout 还有切换分支的含义

情况二:已经 git add,但是还没有 git commit

现在修改存在于:

bash 复制代码
工作区
暂存区

但是还没有进入版本库。

分两步:

第一步,把暂存区撤掉

bash 复制代码
git reset HEAD README.md

这一步之后,修改还在工作区,但是不在暂存区了。

第二步,撤销工作区修改

bash 复制代码
git checkout -- README.md

完整命令:

bash 复制代码
git reset HEAD README.md
git checkout -- README.md

执行完后:

bash 复制代码
git status

工作区就干净了。

情况三:已经 git commit,但是还没有 git push

现在错误代码已经进入:

bash 复制代码
工作区
暂存区
版本库

但是还没有推送到远程仓库。

解决方式:回退到上一个版本

bash 复制代码
git reset --hard HEAD^

或者:

bash 复制代码
git reset --hard HEAD~1

意思是:

把工作区、暂存区、版本库都回退到上一个版本。

三种撤销情况总结表

场景 修改在哪里 解决方式
只修改了工作区,没 add 工作区 git checkout -- 文件名
已经 add,没 commit 工作区 + 暂存区 git reset HEAD 文件名 + git checkout -- 文件名
已经 commit,没 push 工作区 + 暂存区 + 版本库 git reset --hard HEAD^

七:删除文件:rm + git add + git commit

1.复杂删除

就和提交文件一样,你在工作区删除了code.cc

那么你就需要add cmmit 这个样就可以影响到暂存区和版本库

2.简化删除:git rm

Git 提供了一个更简单的命令:

bash 复制代码
git rm file4

它等价于帮你做了两件事:

bash 复制代码
rm file4
git add file4

也就是:

bash 复制代码
删除工作区文件
并且把删除操作加入暂存区

所以你只需要再 commit:

bash 复制代码
git commit -m "删除 file4"

完整流程:

bash 复制代码
git rm file4
git commit -m "删除 file4"
命令 做了什么 后面还需要
rm file5 只删除工作区文件 git add file5 + git commit
git rm file5 删除工作区文件,并加入暂存区 git commit

八:总结表-

分类 命令 作用 重点理解 / 使用场景
创建目录 mkdir gitcode 创建一个项目目录 先准备一个普通目录,用来放项目文件
进入目录 cd gitcode 进入项目目录 后续 Git 操作一般都在项目目录下执行
初始化仓库 git init 初始化 Git 本地仓库 执行后会生成 .git 隐藏目录
查看隐藏文件 ls -a 查看当前目录下的隐藏文件 可以确认是否生成了 .git
查看目录结构 tree .git 查看 .git 目录结构 学习 Git 内部原理时使用
查看 .git 内容 ls .git 查看 .git 目录下有哪些文件 常见有 HEADobjectsrefsindex
当前仓库配置用户名 git config user.name "zjh" 给当前仓库配置用户名 只对当前仓库生效
当前仓库配置邮箱 git config user.email "1937228573@qq.com" 给当前仓库配置邮箱 只对当前仓库生效
全局配置用户名 git config --global user.name "zjh" 配置全局用户名 当前电脑所有 Git 仓库默认使用这个用户名
全局配置邮箱 git config --global user.email "1234567890@qq.com" 配置全局邮箱 当前电脑所有 Git 仓库默认使用这个邮箱
查看所有配置 git config -l 查看当前生效的 Git 配置 会同时显示全局配置和当前仓库配置
查看全局配置 git config --global -l 只查看全局配置 用来确认全局用户名和邮箱
删除当前仓库用户名 git config --unset user.name 删除当前仓库的用户名配置 不影响全局配置
删除当前仓库邮箱 git config --unset user.email 删除当前仓库的邮箱配置 不影响全局配置
删除全局用户名 git config --global --unset user.name 删除全局用户名配置 删除 --global 设置的内容必须加 --global
删除全局邮箱 git config --global --unset user.email 删除全局邮箱配置 删除全局配置时使用
创建文件 touch README.md 创建一个空文件 Linux 下常用创建文件命令
写入内容 echo "hello git" > README.md 向文件写入内容,覆盖原内容 > 会覆盖原文件内容
追加内容 echo "hello world" >> README.md 向文件末尾追加内容 >> 不会覆盖原内容
查看文件内容 cat README.md 查看文件内容 用来确认文件当前内容
查看仓库状态 git status 查看工作区、暂存区状态 最常用命令之一,能看到哪些文件被修改、哪些文件已暂存
添加指定文件到暂存区 git add README.md 把指定文件的修改添加到暂存区 add 添加的是"修改",不是简单添加文件
添加多个文件到暂存区 git add file1 file2 file3 一次性添加多个文件到暂存区 多个文件名之间用空格隔开
添加当前目录所有修改 git add . 把当前目录下所有修改添加到暂存区 新手慎用,容易把不想提交的文件也加进去
提交到版本库 git commit -m "添加 README 文件" 把暂存区内容提交到版本库 -m 后面写本次提交说明
查看详细提交记录 git log 查看完整提交历史 包括 commit id、作者、时间、提交说明
简洁查看提交记录 git log --oneline 一行显示一个提交记录 日常更常用,方便看历史版本
另一种一行日志 git log --pretty=oneline 一行显示一个提交记录 老师课上使用过这种写法
查看工作区和暂存区差异 git diff 查看还没有 git add 的修改内容 默认比较工作区和暂存区
查看指定文件差异 git diff README.md 查看某个文件具体修改了什么 能看到哪一行新增、删除、修改
查看版本库和工作区差异 git diff HEAD -- README.md 查看当前版本库和工作区的区别 HEAD 表示当前版本
查看 HEAD 指向 cat .git/HEAD 查看 HEAD 当前指向哪个分支 常见结果是 ref: refs/heads/master
查看 master 指向 cat .git/refs/heads/master 查看 master 当前指向的 commit id 里面保存的是最新一次提交的 commit id
查看 Git 对象 git cat-file -p commit_id 查看某个 Git 对象的内容 可以查看 commit、tree、blob 对象
查看当前版本 HEAD 表示当前版本 常用于 reset、diff 等命令
表示上一个版本 HEAD^ 表示当前版本的上一个版本 常用于版本回退
表示上两个版本 HEAD^^ 表示当前版本的上上个版本 ^ 可以连续写
表示上一个版本 HEAD~1 表示当前版本往前 1 个版本 HEAD^ 类似
表示上两个版本 HEAD~2 表示当前版本往前 2 个版本 数字表示往前几个版本
只回退版本库 git reset --soft commit_id 只让版本库回退,不动暂存区和工作区 代码和暂存区内容都保留
回退版本库和暂存区 git reset --mixed commit_id 回退版本库和暂存区,不动工作区 --mixed 是默认选项
默认 reset git reset commit_id 默认等价于 git reset --mixed commit_id 不写参数时就是 mixed
强制回退所有区域 git reset --hard commit_id 工作区、暂存区、版本库全部回退 危险命令,会丢掉工作区修改,慎用
回退到上一个版本 git reset --hard HEAD^ 强制回退到上一个版本 已提交但没 push 时可用于撤销 commit
回退到上一个版本 git reset --hard HEAD~1 强制回退到上一个版本 HEAD^ 类似
回退到上两个版本 git reset --hard HEAD~2 强制回退到上两个版本 根据数字决定回退几个版本
查看本地操作历史 git reflog 查看 HEAD 移动历史 用来找回被 reset 后 git log 看不到的 commit id
根据 reflog 找回版本 git reset --hard commit_id 回到 reflog 中某个历史版本 前提是能找到对应 commit id
撤销工作区修改 git checkout -- README.md 撤销 README.md 在工作区中的修改 适用于修改了文件但还没 git add
新版撤销工作区修改 git restore README.md 撤销工作区修改 新版本 Git 推荐写法
取消暂存 git reset HEAD README.md README.md 从暂存区撤回工作区 适用于已经 git add 但还没 git commit
新版取消暂存 git restore --staged README.md 把文件从暂存区撤回来 新版本 Git 推荐写法
已 add 但未 commit 的完整撤销 git reset HEAD README.md && git checkout -- README.md 先取消暂存,再撤销工作区修改 对应"工作区 + 暂存区都有错误修改"的情况
已 commit 但未 push 的撤销 git reset --hard HEAD^ 回退到上一个提交 前提是还没有 push 到远程仓库
删除工作区文件 rm file5 只删除工作区中的文件 删除后还需要 git add file5
提交删除操作到暂存区 git add file5 把删除 file5 这个修改加入暂存区 删除也是一种修改,所以也可以 git add
提交删除操作 git commit -m "删除 file5" 把删除操作提交到版本库 真正让版本库也删除该文件
Git 删除文件 git rm file4 删除工作区文件,并自动加入暂存区 等价于 rm file4 + git add file4
提交 git rm 删除 git commit -m "删除 file4" 提交删除操作 git rm 后仍然需要 commit
普通删除完整流程 rm file5 && git add file5 && git commit -m "删除 file5" 删除文件的三步流程 先删工作区,再加入暂存区,再提交
Git 删除完整流程 git rm file4 && git commit -m "删除 file4" 删除文件的简化流程 推荐使用,少一步
最常用初始化流程 mkdir gitcode && cd gitcode && git init 创建目录并初始化仓库 新项目开始时使用
最常用提交流程 git status && git add . && git commit -m "提交说明" 查看状态、添加修改、提交版本 日常开发最常用流程
修改文件标准流程 git status && git diff && git add README.md && git commit -m "修改 README 文件" 修改文件后的标准提交步骤 先看状态和差异,再提交
查看历史标准流程 git log --oneline 快速查看提交历史 找 commit id 时常用
回退找回标准流程 git reflog && git reset --hard commit_id 找回历史版本 reset 后后悔时使用
核心流程 工作区 --git add--> 暂存区 --git commit--> 版本库 Git 本地提交主线 必须记住
核心原则 commit 只提交暂存区内容 没有 add 的内容不会被 commit file4 add 了,file5 没 add,commit 时只提交 file4
核心原则 Git 追踪的是修改,不是文件 新增、删除、修改都属于修改 所以删除文件后也要 git add
核心警告 不要手动修改 .git 目录 .git 是版本库核心目录 乱改可能导致仓库损坏
核心警告 git reset --hard 慎用 会回退工作区、暂存区、版本库 可能把没保存的代码直接干掉
相关推荐
Komorebi_99991 小时前
Day3:监控、日志、限流、成本管控、版本灰度
大数据·运维·人工智能·大模型
ITyunwei09871 小时前
运维团队如何抓住AI?
大数据·运维·人工智能
段一凡-华北理工大学10 小时前
2026 高炉炼铁智能化技术全景与演进路径~系列文章11:演进路径与行业未来
大数据·网络·人工智能·算法·工业智能体·高炉炼铁智能化
狒狒热知识11 小时前
合规筑基专业赋能178软文网引领软文营销行业规范化发展
大数据
ZGi.ai13 小时前
企业AI资产管理体系:提示词、工作流、知识库应该怎么管
大数据·知识库·工作流编排·ai资产·提示词管理
爱分享的康康13 小时前
低成本自动驾驶数据采集设备理性分析:康谋入门套装适配性解析
大数据·人工智能
程序鉴定师14 小时前
上海小程序开发的坚实保障与行业优势解析
大数据·小程序
Elastic 中国社区官方博客15 小时前
我们如何在 Elasticsearch Serverless 上将向量搜索吞吐量提升一倍
大数据·数据库·人工智能·elasticsearch·搜索引擎·云原生·serverless
zgl_2005377916 小时前
源代码:跨数据库通用SQL语法解析与标注拆解
大数据·数据库·数据仓库·sql·etl·源代码管理