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 思维导图总结

相关推荐
Prince-Peng2 小时前
技术架构系列 - 详解Elasticsearch
大数据·elasticsearch·架构
Tony Bai2 小时前
Git 即数据库:Beads (bd) —— 专为 AI Agent 打造的分布式任务追踪引擎
数据库·人工智能·分布式·git
是店小二呀2 小时前
Git多人协作深度实践指南
大数据·git·elasticsearch
鸿乃江边鸟2 小时前
Spark Datafusion Comet 向量化Rust Native--执行Datafusion计划
大数据·rust·spark·native
小邓睡不饱耶2 小时前
Spark Streaming实时微博热文分析系统:架构设计与深度实现
大数据·分布式·spark
Zilliz Planet2 小时前
<span class=“js_title_inner“>Spark做ETL,与Ray/Daft做特征工程的区别在哪里,如何选型?</span>
大数据·数据仓库·分布式·spark·etl
Warren982 小时前
Allure 常用装饰器:实战用法 + 最佳实践(接口自动化)
运维·服务器·git·python·单元测试·自动化·pytest
2501_943695332 小时前
高职大数据运维与管理专业,怎么学习Hadoop的基础操作?
大数据·运维·学习
洛阳纸贵2 小时前
JAVA高级工程师--Springboot集成ES、MySQL同步ES的方案、ES分片副本、文档及分片规划
java·spring boot·elasticsearch