Git文件状态管理:从基础到进阶的完整指南

文章目录

  • [🎯 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 → Staged
  • git 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 核心要点回顾

  1. 理解文件状态:掌握五种状态的含义和转换
  2. 熟练使用命令git statusgit addgit commit
  3. 合理配置忽略 :使用.gitignore管理不需要版本控制的文件
  4. 有效比较差异 :利用git diff分析文件变化
  5. 安全还原文件:根据不同情况选择合适的还原方法

10.2 思维导图总结

相关推荐
l1t4 分钟前
四种python工具包用SQL查询csv和parquet文件的方法比较
大数据·python·sql
不吃鱼的羊2 小时前
git推送提示错误missing Change-Id in message footer
git
weixin_505154462 小时前
博维数孪创新引领,3D作业指导助力制造业升级
大数据·人工智能·3d·数字孪生·数据可视化·产品交互展示
LONGZETECH4 小时前
新能源汽车维护仿真软件技术架构解析+ 教学落地实操
大数据·c语言·人工智能·架构·汽车·汽车仿真教学软件·汽车教学软件
武子康5 小时前
大数据-250 离线数仓 - 电商分析 Hive 数仓 ADS 层订单分析实战:全国/大区/城市分类汇总与 Airflow 调度
大数据·后端·apache hive
QYR_Jodie5 小时前
半导体与新能源电子驱动,稳增前行:全球激光焊锡机2026-2032年CAGR4.7%,2032年锚定1.32亿美元
大数据·市场报告
SelectDB6 小时前
PostgreSQL + Apache Doris:构建用于实时分析的 HTAP 架构
大数据·数据库·数据分析
Yeats_Liao6 小时前
OpenClaw(二):配置教程
大数据·网络·人工智能·深度学习·机器学习
小霍同学6 小时前
Git 常用指令汇总
git
杰建云1676 小时前
外贸网站如何影响询盘转化率
大数据