基于本文回答

播面 播面

刷题像听歌,多听自然懂
0
评论

什么是 Git 的文件状态?(Untracked、Modified、Staged、Unmodified)

知识点图片

在 Git 中,理解文件的状态是掌握 Git 工作流的核心。Git 管理下的工作目录中的文件,其生命周期主要分为两大类:未跟踪(Untracked)已跟踪(Tracked)

而“已跟踪”的文件又分为三种状态:Unmodified(未修改)Modified(已修改)Staged(已暂存)

为了方便理解,我们可以用“拍照”来打比方:

  • Untracked:镜头外的路人(Git 不管他)。
  • Modified:镜头里的人换了衣服,但还没摆好姿势(改了,但还没准备好拍照)。
  • Staged:摆好姿势,准备按下快门(放进暂存区,马上要保存了)。
  • Unmodified:照片已经拍好并洗出来了(已经存入版本库,且没有新变化)。

下面为你详细解释这四种状态:


1. Untracked(未跟踪)

  • 含义:这是文件刚被创建时的默认状态。它存在于你的项目文件夹中,但 Git 并不知道它的存在,也没有把它纳入版本控制。也就是说,它既没有在之前的快照(Commit)中,也没有被放入暂存区。
  • 常见场景:你刚刚新建了一个文件(如 new_file.txt),还没有执行过 git add
  • Git Status 表现:红色字体,显示在 Untracked files: 下方。
  • 状态转换:使用 git add <文件名> 命令,文件就会被 Git 纳入管理,状态变为 Staged(已暂存)

2. Unmodified(未修改 / 已提交)

  • 含义:文件已经被 Git 跟踪,并且当前的内容与上一次提交(Commit)时的内容完全一致。Git 认为这是一个“干净”的文件。
  • 常见场景:你刚刚完成了一次 git commit,此时工作目录里所有被跟踪的文件都是 Unmodified 状态;或者你刚从远程仓库 clone 下来一个项目,没有任何改动。
  • Git Status 表现:不会显示在 git status 中(终端会提示 nothing to commit, working tree clean)。
  • 状态转换
    • 如果你修改了它,它就会变成 Modified(已修改)
    • 如果你删除了它,Git 会记录这个删除动作。

3. Modified(已修改)

  • 含义:文件已经被 Git 跟踪(原本是 Unmodified 状态),但你对它进行了修改,且还没有把这些修改保存到暂存区
  • 常见场景:你打开了一个已经存在于版本库中的代码文件,加了两行代码,然后保存了。
  • Git Status 表现:红色字体,显示在 Changes not staged for commit: 下方。
  • 状态转换
    • 使用 git add <文件名>,状态变为 Staged(已暂存)
    • 使用 git checkout -- <文件名>git restore <文件名>,会撤销修改,退回 Unmodified(未修改) 状态。

4. Staged(已暂存)

  • 含义:文件被修改或新建后,你告诉 Git:“这个文件的当前版本我已经确认了,请把它放进下一次提交的候车室(暂存区)里”。
  • 常见场景:你修改完代码并执行了 git add,但还没有执行 git commit
  • Git Status 表现:绿色字体,显示在 Changes to be committed: 下方。
  • 状态转换
    • 执行 git commit 后,暂存区里的内容会被永久保存到 Git 仓库,文件状态变回 Unmodified(未修改)
    • 如果你此时再次修改这个 Staged 文件,它会同时拥有 Staged 和 Modified 两个状态(意味着你需要再次 git add 把新的修改也放入暂存区)。

💡 总结:Git 文件的生命周期流转图

你可以通过下面这个流程,清晰地看到平时敲的代码是如何在这四种状态之间流转的:

plaintext
              新建文件
                 │
                 ▼
          【Untracked (未跟踪)】
                 │
                 │ git add (添加)
                 ▼
          【Staged (已暂存)】 ────────┐
                 │                    │
                 │ git commit (提交)   │
                 ▼                    │
         【Unmodified (未修改)】       │ git add (添加)
                 │                    │
                 │ 修改文件            │
                 ▼                    │
          【Modified (已修改)】 ────────┘
00:00
00:00