git的文件有4种状态。 因此,问题是:删除和移动/重命名文件的状态是什么? 当然,如果文件留在文件系统中,则在提交之后将不对其进行跟踪,但是在提交之前,该文件具有已删除状态(用于删除)。我认为删除实际上不是文件修改,而是事件。
答案 0 :(得分:1)
在此图中,可以将删除或重命名视为完全类似于编辑。进行内容更改(编辑文件),更改元数据(例如设置文件可执行文件)还是删除它都没有关系,
如果您有一个提交给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)