文章目录
- [🎯 1. Git文件状态概述](#🎯 1. Git文件状态概述)
-
- [1.1 文件状态的重要性](#1.1 文件状态的重要性)
- [1.2 Git状态分类](#1.2 Git状态分类)
- [🔍 2. 详细解析各种文件状态](#🔍 2. 详细解析各种文件状态)
-
- [2.1 Untracked(未跟踪状态)](#2.1 Untracked(未跟踪状态))
- [2.2 Tracked(已跟踪状态)](#2.2 Tracked(已跟踪状态))
-
- [2.2.1 Unmodified(未修改状态)](#2.2.1 Unmodified(未修改状态))
- [2.2.2 Modified(已修改状态)](#2.2.2 Modified(已修改状态))
- [2.2.3 Staged(暂存状态)](#2.2.3 Staged(暂存状态))
- [📋 3. 查看文件状态](#📋 3. 查看文件状态)
-
- [3.1 基本命令](#3.1 基本命令)
- [3.2 参数说明](#3.2 参数说明)
- [3.3 实例演示](#3.3 实例演示)
- [➕ 4. 文件加入暂存区](#➕ 4. 文件加入暂存区)
-
- [4.1 命令语法](#4.1 命令语法)
- [📝 5. 文件提交与删除](#📝 5. 文件提交与删除)
-
- [5.1 文件提交](#5.1 文件提交)
- [5.2 修改Commit记录](#5.2 修改Commit记录)
- [5.3 删除文件](#5.3 删除文件)
- [5.4 挽救已删除文件](#5.4 挽救已删除文件)
- [🚫 6. 忽略文件配置](#🚫 6. 忽略文件配置)
-
- [6.1 创建.gitignore文件](#6.1 创建.gitignore文件)
- [6.2 忽略规则示例](#6.2 忽略规则示例)
- [6.3 实例演示](#6.3 实例演示)
- [📊 7. 日志记录操作](#📊 7. 日志记录操作)
-
- [7.1 查看提交日志](#7.1 查看提交日志)
- [7.2 参数说明](#7.2 参数说明)
- [7.3 查看执行过的命令](#7.3 查看执行过的命令)
- [🔍 8. 比较文件差异](#🔍 8. 比较文件差异)
-
- [8.1 命令格式](#8.1 命令格式)
- [8.2 diff输出格式](#8.2 diff输出格式)
- [8.3 实战演示](#8.3 实战演示)
- [🔄 9. 还原文件](#🔄 9. 还原文件)
-
- [9.1 三种情况及解决方案](#9.1 三种情况及解决方案)
-
- [9.1.1 情况I:仅修改,无Git操作](#9.1.1 情况I:仅修改,无Git操作)
- [9.1.2 情况II:修改并添加到暂存区](#9.1.2 情况II:修改并添加到暂存区)
- [9.1.3 情况III:修改并提交到仓库区](#9.1.3 情况III:修改并提交到仓库区)
- [💎 10. 总结与最佳实践](#💎 10. 总结与最佳实践)
-
- [10.1 核心要点回顾](#10.1 核心要点回顾)
- [10.2 思维导图总结](#10.2 思维导图总结)
📝 前言
在Git版本控制系统中,理解文件状态是掌握Git操作的基础
本文将深入探讨Git文件的各种状态及其转换,帮助您更好地管理代码版本,避免不必要的错误操作
无论您是Git新手还是有一定经验的开发者,本文都将为您提供实用的知识和技巧😊
个人主页:艺杯羹
系列专栏:Git系列
🎯 1. Git文件状态概述
1.1 文件状态的重要性
在Git中,文件状态决定了我们可以对文件执行哪些操作。了解文件当前状态可以:
- 避免提交不希望提交的文件
- 确保需要提交的文件被正确提交
- 有效管理文件修改历史
1.2 Git状态分类
Git文件主要有五种状态:
- Untracked:未跟踪状态
- Unmodified:未修改状态
- Modified:已修改状态
- Staged:暂存状态
- Deleted:已删除状态
关键理解:Git不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变。判断方法是用SHA-1算法计算文件的校验和。
🔍 2. 详细解析各种文件状态
| 状态 | 描述 | 转换方式 |
|---|---|---|
| Untracked | 文件在文件夹中,但未加入Git库 | git add → Staged |
| Unmodified | 文件已入库,未修改 | 修改 → Modified git rm → Untracked |
| Modified | 文件已修改,但未进行其他操作 | git add → Staged git checkout → Unmodified |
| Staged | 文件已添加到暂存区 | git commit → Unmodified git reset HEAD → Modified |
| Deleted | 文件已从工作目录删除 | git commit → Unmodified |
2.1 Untracked(未跟踪状态)
定义 :文件在文件夹中,但并未加入到Git库,不参与版本控制
转换方式:
- 通过
git add命令变为Staged状态
2.2 Tracked(已跟踪状态)
被纳入版本控制,包含三种子状态:
2.2.1 Unmodified(未修改状态)
- 文件已入库,未修改
- 版本库中的文件快照与文件夹中完全一致
状态转换: - 修改后变为Modified状态
- 使用
git rm移出版本库变为Untracked状态
2.2.2 Modified(已修改状态)
- 文件已修改,但未进行其他操作
状态转换: - 通过
git add进入Staged状态 - 使用
git checkout丢弃修改(撤销),返回Unmodified状态
2.2.3 Staged(暂存状态)
- 文件已添加到暂存区,等待提交
状态转换: - 执行
git commit同步到库中,变为Unmodified状态 - 执行
git reset HEAD filename取消暂存,变为Modified状态
注意:这些文件的状态会随着我们执行Git命令发生变化
状态转换流程:
- 新建文件 → Untracked
git add→ Stagedgit commit→ Unmodified- 修改 → Modified
git rm→ Untracked
📋 3. 查看文件状态
3.1 基本命令
xml
git status
3.2 参数说明
-s:简洁输出
3.3 实例演示
xml
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
a.txt
➕ 4. 文件加入暂存区
4.1 命令语法
xml
git add 文件名
# 所有文件加入暂存区
git add .

说明:图中A表示文件已进入暂存区
📝 5. 文件提交与删除
5.1 文件提交

xml
git commit -m "提交信息"
参数说明:
-m:提交信息,应简单清晰,中英文均可- 不加
-m参数会进入vim编辑器
5.2 修改Commit记录
xml
# 查看提交历史
git log --oneline
# 修改最后一次提交
git commit --amend -m "welcome to facebook"

5.3 删除文件
xml
git rm 文件名
注意:删除的文件只是从工作目录删除,版本库中仍存在
5.4 挽救已删除文件
xml
# 挽救单个文件
git checkout index.html
# 挽救所有删除文件
git checkout .
重要提示:此命令也可用于恢复修改后反悔的文件
🚫 6. 忽略文件配置
6.1 创建.gitignore文件
在工作目录中创建.gitignore文件,列出要忽略的文件模式
一般直接在文件夹中创建不了.gitignore
所以要用到代码来创建 touch .gitinore
6.2 忽略规则示例
xml
# 忽略public下的所有目录及文件
/public/*
# 不忽略/public/assets
!/public/assets
# 忽略具体文件
index.class
# 忽略所有class文件
*.class
# 忽略a.class和b.class
[ab].class
规则说明:
#:注释/:表示目录*:通配多个字符?:通配单个字符[]:包含单个字符的匹配列表!:不忽略匹配的文件或目录
6.3 实例演示
xml
# 创建class文件
touch user.class
touch userDao.class
# 创建.gitignore文件
touch .gitignore
vim .gitignore
# 添加忽略规则
*.class
📊 7. 日志记录操作
7.1 查看提交日志
xml
git log
7.2 参数说明
--graph:查看分支合并图--oneline:将每个提交压缩到一行
7.3 查看执行过的命令
xml
git reflog
🔍 8. 比较文件差异
8.1 命令格式
xml
git diff [--cached]
说明:
- 不加
cached:比较工作区和暂存区- 加
cached:比较暂存区和版本区
8.2 diff输出格式
---:标记原始文件+++:标记新文件@@:上下文行号-:原始文件删除行+:原始文件增加行
8.3 实战演示
xml
# 比较工作区与暂存区
git diff
# 添加修改到暂存区
git add .
# 比较暂存区与版本区
git diff --cached
🔄 9. 还原文件
9.1 三种情况及解决方案
9.1.1 情况I:仅修改,无Git操作
xml
git checkout -- aaa.txt
9.1.2 情况II:修改并添加到暂存区
xml
git log --oneline # 可省略
git reset HEAD # 回退到当前版本
git checkout -- aaa.txt
9.1.3 情况III:修改并提交到仓库区
xml
git log --oneline # 可省略
git reset HEAD^ # 回退到上一个版本
git checkout -- aaa.txt
注意 :
git reset可根据git log --oneline显示的版本号回退到任意版本
HEAD:当前版本HEAD^:上一个版本HEAD^^:上上一个版本
💎 10. 总结与最佳实践
10.1 核心要点回顾
- 理解文件状态:掌握五种状态的含义和转换
- 熟练使用命令 :
git status、git add、git commit等 - 合理配置忽略 :使用
.gitignore管理不需要版本控制的文件 - 有效比较差异 :利用
git diff分析文件变化 - 安全还原文件:根据不同情况选择合适的还原方法
10.2 思维导图总结

