文件的状态分类
Git 中文件的状态主要分为以下几种:
-
Untracked(未跟踪)
-
定义 :这些文件从未被 Git 跟踪过,通常是因为它们是新创建的文件,或者被
.gitignore
排除在外。 -
示例 :新创建的文件
newfile.txt
,或者被.gitignore
排除的文件temp.log
。
-
-
Tracked(被跟踪)
-
定义:这些文件已经被 Git 添加到版本控制中,Git 会记录它们的修改。
-
进一步分类:
-
Unmodified(未修改):文件自上次提交后没有被修改。
-
Modified(已修改):文件自上次提交后被修改了,但尚未添加到暂存区。
-
Staged(已暂存) :文件被修改后,通过
git add
添加到暂存区,准备提交。
-
-
3. git ls-files
这个命令用于显示已经被跟踪的文件,包括加入暂存区和已经提交的.
在 Git 中,文件的状态是指文件相对于 Git 仓库的当前情况。以下是一些常见的文件状态及其含义:
-
未跟踪(Untracked):
-
这是新创建的文件或从其他位置复制过来的文件,Git 还没有开始跟踪这些文件的更改。
-
这些文件不会出现在
git status
命令的 "Changes to be committed" 部分,而是出现在 "Untracked files" 部分。
-
-
已修改(Modified):
-
文件已经被修改,但还没有添加到暂存区。
-
这些文件出现在
git status
命令的 "Changes not staged for commit" 部分。
-
-
已暂存(Staged):
-
文件的修改已经被添加到暂存区,准备在下一次提交时被保存到仓库历史记录中。
-
这些文件出现在
git status
命令的 "Changes to be committed" 部分。
-
-
已提交(Committed):
-
文件的更改已经被提交到本地仓库,成为仓库历史记录的一部分。
-
提交后的文件不再出现在
git status
命令的输出中,除非你再次修改它。
-
文件状态的切换:
-
未跟踪(Untracked)-> 已暂存(Staged):
-
使用
git add <file>
命令将未跟踪的文件添加到暂存区。 -
或者,使用
git add .
命令将所有未跟踪的文件和已修改的文件添加到暂存区。
-
-
已修改(Modified)-> 已暂存(Staged):
- 使用
git add <file>
命令将已修改的文件添加到暂存区。
- 使用
-
已暂存(Staged)-> 已修改(Modified):
- 使用
git reset <file>
命令将已暂存的文件从暂存区移除,使其回到已修改状态。
- 使用
-
已暂存(Staged)-> 未跟踪(Untracked):
- 这种情况通常不会发生,因为文件一旦被添加到暂存区,Git 就开始跟踪它了。但是,你可以使用
git rm --cached <file>
命令从暂存区和 Git 仓库中删除文件,使其回到未跟踪状态。
- 这种情况通常不会发生,因为文件一旦被添加到暂存区,Git 就开始跟踪它了。但是,你可以使用
-
已修改(Modified)-> 未跟踪(Untracked):
- 这种情况也不会发生,因为文件一旦被修改,Git 就开始跟踪它了。但是,你可以使用
git checkout -- <file>
命令将文件恢复到最后一次提交的状态,或者使用git rm <file>
命令从工作目录中删除文件。
- 这种情况也不会发生,因为文件一旦被修改,Git 就开始跟踪它了。但是,你可以使用
-
已提交(Committed)-> 已修改(Modified):
- 修改已提交的文件,使其成为已修改状态。
-
已提交(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
已经被修改并暂存,准备提交。
状态转换
-
从 Untracked 到 Tracked(通过
git add
)-
新文件
newfile.txt
是未跟踪的。 -
使用
git add newfile.txt
后,文件进入暂存区(Staged),并开始被跟踪。
-
-
从 Tracked 到 Modified
-
文件
README.md
已经被跟踪。 -
如果你修改了
README.md
,但尚未运行git add
,文件状态变为 Modified(已修改但未暂存)。
-
-
从 Modified 到 Staged
-
修改后的文件
README.md
处于 Modified 状态。 -
使用
git add README.md
后,文件状态变为 Staged(已暂存)。
-
-
从 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。