首页 > 解决方案 > 文件的 Git 文件状态

问题描述

根据官方 git 网站:文件状态

git有4种文件状态。所以问题是:删除和移动/重命名文件的状态是什么?当然,如果文件留在文件系统中,那么在提交之后它将不被跟踪,但在提交之前它具有删除状态(用于删除)。我认为删除不是真正的文件修改,而是一个事件。

标签: git

解决方案


您可以考虑删除或重命名,就像此图中的编辑一样。无论您是进行内容更改(编辑文件)、进行元数据更改(例如,设置文件可执行文件)还是删除它,都通过相同的工作流程。

如果您有一个提交给 git 的文件(在图表中处于青色“未修改”状态)并且您将其删除,那么您现在处于“已修改”状态。git 已检测到此更改:

On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    foo.txt

no changes added to commit (use "git add" and/or "git commit -a")

此时文件已从磁盘上删除,但并未暂存以进行删除。它处于黄色“修改”状态。要暂存它,您可以像任何其他更改一样暂存它,方法是运行git add foo.txt.

回想一下,尽管有名称,git add但它不会添加文件,它会将更改暂存到文件中。在这种情况下,更改是删除,因此git add将进行删除。

git rm(我提到这一点只是为了证明一点,事实上,运行来暂存文件的删除要自然得多。两者都可以。)

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    foo.txt

此时,文件处于红色“暂存”状态。当您提交此更改时,该文件将不再存在于存储库中。

[master 3b58d71] deleted
 1 file changed, 7 deletions(-)
 delete mode 100644 foo.txt

重新创建文件将以灰色的“未跟踪”状态重新开始。

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    foo.txt

nothing added to commit but untracked files present (use "git add" to track)

推荐阅读