git中文件的状态状态切换

embedded/2025/2/9 2:34:25/

文件的状态分类

Git 中文件的状态主要分为以下几种:

  1. Untracked(未跟踪)

    • 定义:这些文件从未被 Git 跟踪过,通常是因为它们是新创建的文件,或者被 .gitignore 排除在外。

    • 示例:新创建的文件 newfile.txt,或者被 .gitignore 排除的文件 temp.log

  2. Tracked(被跟踪)

    • 定义:这些文件已经被 Git 添加到版本控制中,Git 会记录它们的修改。

    • 进一步分类

      • Unmodified(未修改):文件自上次提交后没有被修改。

      • Modified(已修改):文件自上次提交后被修改了,但尚未添加到暂存区。

      • Staged(已暂存):文件被修改后,通过 git add 添加到暂存区,准备提交。

                3. git ls-files 

                        这个命令用于显示已经被跟踪的文件,包括加入暂存区和已经提交的.

在 Git 中,文件的状态是指文件相对于 Git 仓库的当前情况。以下是一些常见的文件状态及其含义:

  1. 未跟踪(Untracked)

    • 这是新创建的文件或从其他位置复制过来的文件,Git 还没有开始跟踪这些文件的更改。

    • 这些文件不会出现在 git status 命令的 "Changes to be committed" 部分,而是出现在 "Untracked files" 部分。

  2. 已修改(Modified)

    • 文件已经被修改,但还没有添加到暂存区。

    • 这些文件出现在 git status 命令的 "Changes not staged for commit" 部分。

  3. 已暂存(Staged)

    • 文件的修改已经被添加到暂存区,准备在下一次提交时被保存到仓库历史记录中。

    • 这些文件出现在 git status 命令的 "Changes to be committed" 部分。

  4. 已提交(Committed)

    • 文件的更改已经被提交到本地仓库,成为仓库历史记录的一部分。

    • 提交后的文件不再出现在 git status 命令的输出中,除非你再次修改它。

文件状态的切换:

  1. 未跟踪(Untracked)-> 已暂存(Staged)

    • 使用 git add <file> 命令将未跟踪的文件添加到暂存区。

    • 或者,使用 git add . 命令将所有未跟踪的文件和已修改的文件添加到暂存区。

  2. 已修改(Modified)-> 已暂存(Staged)

    • 使用 git add <file> 命令将已修改的文件添加到暂存区。

  3. 已暂存(Staged)-> 已修改(Modified)

    • 使用 git reset <file> 命令将已暂存的文件从暂存区移除,使其回到已修改状态。

  4. 已暂存(Staged)-> 未跟踪(Untracked)

    • 这种情况通常不会发生,因为文件一旦被添加到暂存区,Git 就开始跟踪它了。但是,你可以使用 git rm --cached <file> 命令从暂存区和 Git 仓库中删除文件,使其回到未跟踪状态。

  5. 已修改(Modified)-> 未跟踪(Untracked)

    • 这种情况也不会发生,因为文件一旦被修改,Git 就开始跟踪它了。但是,你可以使用 git checkout -- <file> 命令将文件恢复到最后一次提交的状态,或者使用 git rm <file> 命令从工作目录中删除文件。

  6. 已提交(Committed)-> 已修改(Modified)

    • 修改已提交的文件,使其成为已修改状态。

  7. 已提交(Committed)-> 未跟踪(Untracked)

    • 删除已提交的文件,使其成为未跟踪状态。

具体状态解释

Changes not staged for commit(已修改但未暂存)
  • 状态:Modified(已修改)

  • 含义:这些文件已经被 Git 跟踪(即之前被添加到版本控制中),但自上次提交后被修改了,且尚未通过 git add 添加到暂存区。

  • 示例

    bash复制

    git status

    输出:

    复制

    On branch main
    Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   README.md

    这里,README.md 是一个被跟踪的文件,但它被修改了,且尚未暂存。

Changes to be committed(已暂存)
  • 状态:Staged(已暂存)

  • 含义:这些文件已经被修改,并且通过 git add 添加到了暂存区,准备在下一次提交时被记录到版本历史中。

  • 示例

    bash复制

    git add README.md
    git status

    输出:

    复制

    On branch main
    Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified:   README.md

    这里,README.md 已经被修改并暂存,准备提交。

状态转换

  1. 从 Untracked 到 Tracked(通过 git add

    • 新文件 newfile.txt 是未跟踪的。

    • 使用 git add newfile.txt 后,文件进入暂存区(Staged),并开始被跟踪。

  2. 从 Tracked 到 Modified

    • 文件 README.md 已经被跟踪。

    • 如果你修改了 README.md,但尚未运行 git add,文件状态变为 Modified(已修改但未暂存)。

  3. 从 Modified 到 Staged

    • 修改后的文件 README.md 处于 Modified 状态。

    • 使用 git add README.md 后,文件状态变为 Staged(已暂存)。

  4. 从 Staged 到 Committed

    • 暂存区中的文件 README.md 通过 git commit 提交后,文件状态变为 Committed(已提交)。

总结

  • Changes not staged for commit:文件已经被跟踪(Tracked),但被修改后尚未暂存(Modified)。

  • Changes to be committed:文件已经被跟踪(Tracked),并且修改后已经暂存(Staged)。

  • 修改文件内容:如果文件已经被跟踪,修改文件内容后,文件状态会从 Unmodified 变为 Modified。通过 git add 添加到暂存区后,状态变为 Staged。


http://www.ppmy.cn/embedded/160683.html

相关文章

使用 Axios ——个人信息修改与提示框实现

目录 详细介绍&#xff1a;个人信息设置与修改页面实现 1. HTML 结构 2. CSS 样式 3. JavaScript 核心逻辑 a. 信息渲染与表单提交 b. 头像上传与预览 4. 功能详解 5. 总结 提示&#xff1a; 这段代码展示了如何创建一个简单的个人信息设置页面&#xff0c;包含用户个…

HTML-表格,表单标签

表单标签: 场景:在网页中负责数据采集功能,如注册,登录等数据采集. 标签:<form> 表单项:不同类型的input元素,下拉列表,文本等. <input>:定义表单项,通过type属性控制输入形式. <select>:定义下拉列表 <textarea>:定义文本域 属性: action:规定当提…

llama_index

目录 安装 llama_index 搜索引擎 用 DeepSeek API 替换本地 Ollama 模型 源代码&#xff1a; 安装 pip install llama_index llama_index 搜索引擎 llama_index框架构建搜索引擎_llamaindex使用正则表达式拆分文档-CSDN博客 用 DeepSeek API 替换本地 Ollama 模型 https…

保姆级教程 !SQL Server数据库的备份和还原

使用 SQL Server Management Studio (SSMS) 备份和还原数据库 1、数据库备份 Step 1 打开 SSMS 输入server name 以及用户名和密码连接到你的 SQL Server 实例 Step 2 展开Database,选中你要备份的数据库 Step 3 右击选中的数据库&#xff0c;点击Tasks --> Back …

Leetcode—487. 最大连续1的个数 II【中等】Plus

2025每日刷题&#xff08;210&#xff09; Leetcode—487. 最大连续1的个数 II 实现代码 class Solution { public:int findMaxConsecutiveOnes(vector<int>& nums) {int zeros 0;int ans 0;for(int l 0, r 0; r < nums.size(); r) {if(nums[r] 0) {zeros;…

【Axure教程】标签版分级多选下拉列表

分级多选下拉列表是指一个下拉列表&#xff0c;它包含多个层次的选项&#xff0c;用户可以选择一个或多个选项。这些选项通常是根据某种层级关系来组织的&#xff0c;例如从上到下有不同的分类或者过滤条件&#xff0c;用户选择上层选项后&#xff0c;下层选项会发生变化&#…

9. k8s二进制集群之kube-controller-manager部署

同样在部署主机上创建证书请求文件(为之后的证书生成做准备)根据上面的证书文件创建证书(结果会在当前目录下产生kube-controller-manager证书)创建kube-controller-manager服务配置文件创建kube-controller-manager服务启动文件同步kube-controller-manager证书到对应mast…

【深度学习入门_机器学习理论】决策树(Decision Tree)

本部分主要为机器学习理论入门_决策树算法&#xff0c;书籍参考 “ 统计学习方法&#xff08;第二版&#xff09;”。 学习目标&#xff1a; 熟悉决策树基础知识&#xff1a;树、熵、信息增益、基尼指数&#xff1b;熟悉决策树构建步骤&#xff1b;熟悉3种典型决策树算法&…