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

【从0开始学习Java | 第23篇】动态代理

【从0开始学习Java | 第23篇】动态代理

文章目录 * Java动态代理概述 * 一、动态代理的核心概念 * 形象解释 * 二、两种主流动态代理实现 * 1. JDK动态代理(基于接口) * 原理 * 示例代码 * 优缺点 * 2. CGLIB动态代理(基于子类) * 原理 * 示例代码(需引入CGLIB依赖) * 优缺点 * 三、JDK与CGLIB动态代理对比 * 四、实际应用场景 * 五、总结 Java动态代理概述 在Java开发中,代理模式设计模式之一,而动态代理作为代理模式的进阶形式,在框架开发(如Spring AOP)、日志记录、权限控制等场景中发挥着关键作用。本文将从核心概念出发,拆解两种主流动态代理的实现逻辑,并分析其适用场景。 一、动态代理的核心概念 动态代理指在程序运行时,通过反射机制动态生成代理类,而非在编译期预先定义。其核心价值在于:无需为每个目标类手动编写代理类,即可统一为多个目标类添加横切逻辑(如日志、事务、异常处理),降低代码耦合度。

By Ne0inhk
从零开始学java--二叉树和哈希表

从零开始学java--二叉树和哈希表

数据结构基础 目录 数据结构基础 树 树形结构: 树的概念: 二叉树 概念: 两种特殊的二叉树: 二叉树的性质: 创建一个简单的二叉树: 二叉树的遍历 前序遍历: 中序遍历: 后序遍历: 层序遍历: 二叉查找树和平衡二叉树 二叉查找树: 平衡二叉树: 红黑树 哈希表 树 树形结构: 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 1. 有一个特殊的结点,称为根结点,根结点没有前驱结点。 2. 除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti (1 <= i

By Ne0inhk

VSCode中如何搭建JAVA+MAVEN开发环境?

一、前置条件(必须先安装) 在配置 VSCode 的 Maven 环境前,需要先安装好以下工具: 1. JDK(推荐 JDK 8/11/17,Maven 对新版本 JDK 兼容性较好) 2. Maven(官网下载 /apache-maven-3.6 + 版本) 3. 配置环境变量: * 配置JAVA_HOME(指向 JDK 安装目录) * 配置MAVEN_HOME(指向 Maven 安装目录) * 把%MAVEN_HOME%\bin和%JAVA_HOME%\bin添加到系统Path中 * 验证:打开终端执行 java -version 和

By Ne0inhk
从 0 到 1:用 Trae 插件 Builder 模式开发端午包粽子小游戏

从 0 到 1:用 Trae 插件 Builder 模式开发端午包粽子小游戏

前言 Trae插件获取:https://www.trae.com.cn/plugin 在编程的世界里,效率就是生命。我们开发者常常为了一个项目的搭建,重复着创建文件夹、初始化项目配置、编写样板代码等一系列繁琐的操作,耗费了大量的时间和精力。而如今,Trae 插件的 Builder 模式横空出世,为我们的编程之旅带来了一束全新的光亮。它就像是一个智能化的Ai工程师,能够理解我们的需求,快速搭建起项目的框架,极大地减少了重复性工作,让我们得以将更多的精力投入到核心逻辑的开发中。由于马上就要端午节了,那么接下来我将利用Trae插件的builder模式,带大家从0到1开发一个端午包粽子小游戏。 Trae插件builder模式介绍 什么是Trae 插件的Builder 模式呢?通俗点来说,就好比你想盖一座房子,正常情况下,你得先画图纸、挖地基、砌墙、装窗户等等,一步步来,这中间要操心好多琐碎又重复的活儿。而 Builder 模式就像是有个智能的建筑工人,你跟它说 “我要盖一座两层楼的别墅,要有个大大的客厅、三间卧室、一个花园”

By Ne0inhk