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

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

文章目录

📝 前言
在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命令发生变化
状态转换流程:新建文件 → Untrackedgit add → Stagedgit commit → Unmodified修改 → Modifiedgit rm → Untracked

📋 3. 查看文件状态

3.1 基本命令

git status 

3.2 参数说明

  • -s:简洁输出

3.3 实例演示

$ 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 命令语法

git add 文件名 # 所有文件加入暂存区 git add . 
在这里插入图片描述
说明:图中A表示文件已进入暂存区

📝 5. 文件提交与删除

5.1 文件提交

在这里插入图片描述
git commit -m "提交信息" 
参数说明-m:提交信息,应简单清晰,中英文均可不加-m参数会进入vim编辑器

5.2 修改Commit记录

# 查看提交历史 git log --oneline # 修改最后一次提交 git commit --amend -m "welcome to facebook" 
在这里插入图片描述

5.3 删除文件

git rm 文件名 
注意:删除的文件只是从工作目录删除,版本库中仍存在

5.4 挽救已删除文件

# 挽救单个文件 git checkout index.html # 挽救所有删除文件 git checkout . 
重要提示:此命令也可用于恢复修改后反悔的文件

🚫 6. 忽略文件配置

6.1 创建.gitignore文件

在工作目录中创建.gitignore文件,列出要忽略的文件模式
一般直接在文件夹中创建不了.gitignore
所以要用到代码来创建 touch .gitinore

在这里插入图片描述

6.2 忽略规则示例

# 忽略public下的所有目录及文件 /public/* # 不忽略/public/assets !/public/assets # 忽略具体文件 index.class # 忽略所有class文件 *.class # 忽略a.class和b.class [ab].class 
规则说明#:注释/:表示目录*:通配多个字符?:通配单个字符[]:包含单个字符的匹配列表!:不忽略匹配的文件或目录

6.3 实例演示

# 创建class文件 touch user.class touch userDao.class # 创建.gitignore文件 touch .gitignore vim .gitignore # 添加忽略规则 *.class 

📊 7. 日志记录操作

7.1 查看提交日志

git log 

7.2 参数说明

  • --graph:查看分支合并图
  • --oneline:将每个提交压缩到一行

7.3 查看执行过的命令

git reflog 

🔍 8. 比较文件差异

8.1 命令格式

git diff [--cached] 
说明:不加cached:比较工作区和暂存区加cached:比较暂存区和版本区

8.2 diff输出格式

  • ---:标记原始文件
  • +++:标记新文件
  • @@:上下文行号
  • -:原始文件删除行
  • +:原始文件增加行

8.3 实战演示

# 比较工作区与暂存区 git diff # 添加修改到暂存区 git add . # 比较暂存区与版本区 git diff --cached 

🔄 9. 还原文件

9.1 三种情况及解决方案

9.1.1 情况I:仅修改,无Git操作

git checkout -- aaa.txt 

9.1.2 情况II:修改并添加到暂存区

git log --oneline # 可省略 git reset HEAD # 回退到当前版本 git checkout -- aaa.txt 

9.1.3 情况III:修改并提交到仓库区

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

在这里插入图片描述

Read more

Flutter 三方库 http_services 的鸿蒙化适配指南 - 打造强类型的工业级 API 交互层、助力鸿蒙端复杂后端服务的模块化集成

Flutter 三方库 http_services 的鸿蒙化适配指南 - 打造强类型的工业级 API 交互层、助力鸿蒙端复杂后端服务的模块化集成

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 http_services 的鸿蒙化适配指南 - 打造强类型的工业级 API 交互层、助力鸿蒙端复杂后端服务的模块化集成 前言 在 OpenHarmony 鸿蒙中大型项目的研发过程中,网络请求层(Networking Layer)的设计往往决定了代码的可维护性与排障速度。面对成百上千个业务接口,如果仅依赖底层的 HttpClient 或散乱的 Dio 调用,应用很快会沦为“Spaghetti Code(面条代码)”。http_services 基于广受好评的 Dio 引擎,引入了高度模块化的 Service 模式与强类型的 Request/Response 映射机制。本文将引导你在鸿蒙端利用 http_services 构建一套标准统一、逻辑清晰且极具工业质感的网络交互架构。 一、

By Ne0inhk
【Linux】I/O 多路转接:select & epoll 技术剖析

【Linux】I/O 多路转接:select & epoll 技术剖析

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 * 前言:🔥 I/O 多路转接 * 一:🔥 I/O 多路转接之 select * 🦋 初识 select * 🦋 select 函数原型 * 🎀 关于 fd_set 结构 * 🎀 函数返回值 * 🦋 理解 select 执行过程 * 🎀 socket 就绪条件 * 读就绪 * 写就绪 * 异常就绪(选学) * 🎀 select 的特点 * 🎀 select 缺点 * 🦋 select 使用示例: selectserver * 二:🔥 poll * 🦋 初识 poll * 🦋 poll 函数原型 * 🦋 poll_server.hpp: * 🦋 poll 的优点:

By Ne0inhk
Linux 进程间通信之管道基础解析 —— 匿名管道的原理与实现

Linux 进程间通信之管道基础解析 —— 匿名管道的原理与实现

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 进程间通信基础认知 * 1.1 进程间通信的核心目的 * 1.2 进程间通信的发展与分类 * 二. 管道的基础概念 * 2.1 管道的定义 * 2.2 管道的核心特性(最后总结部分的图片里更全点,可以着重看那个) * 三. 匿名管道的创建与 API * 3.1 匿名管道的创建函数 * 3.2 匿名管道的简单使用示例 * 四. 基于 fork 的匿名管道跨进程通信 * 4.1 fork 共享管道的核心原理 * 4.2

By Ne0inhk

在 Mac 上完美配置 VSCode 的 C/C++ 开发环境(GCC/G++ 详细教程 )

本文手把手教你如何在 macOS 系统上配置 VSCode 的 C/C++ 开发环境,解决各种常见问题,让你轻松开启 C/C++ 编程之旅! 前言 作为程序员,一个顺手的开发环境至关重要。VSCode 作为轻量级但功能强大的代码编辑器,配合 GCC/G++ 编译器,能够在 Mac 上提供优秀的 C/C++ 开发体验。本文将详细介绍从零开始的完整配置过程。 一、环境准备:安装编译工具 1.1 安装 Xcode Command Line Tools(推荐首选) 打开终端,执行以下命令: xcode-select --install 执行后会弹出安装对话框,点击"安装"即可。

By Ne0inhk