版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl

Git组成部分
Git 由四部分组成:工作目录(Working Directory)、暂存区(Staging Area,又被称为 Index)、本地仓库(Local Repository)和远程仓库(Remote Repository)。

1. 工作目录(Working Directory)
工作目录是开发者本地设备上的一个文件夹。它包含了从 Git 版本库中提取出来的特定版本的文件副本,供开发者在此进行日常的代码编写、修改、删除和测试等工作。所有尚未被 Git 追踪或记录的本地变更均首先发生在这个区域。
2. 暂存区(Staging Area / Index)
暂存区是位于工作目录与本地仓库之间的缓冲,通常体现为 Git 目录下的一个索引文件。它记录了开发者意图在下一次提交(commit)中保存的文件状态及其快照。通过将工作目录中的特定修改添加到暂存区,开发者可以精准地组织和控制下一次提交的具体内容,而非被迫提交所有变更。
3. 本地仓库(Local Repository)
本地仓库是隐藏在项目根目录下(即 .git 文件夹)的本地数据库,存储着项目的完整演进历史。它包含了所有的提交记录(commits)、分支(branches)、标签(tags)以及文件的历史快照。当暂存区的内容被正式提交后,这些快照便会永久性地安全存入本地仓库中,形成版本控制历史的新节点。
4. 远程仓库(Remote Repository)
远程仓库是托管在网络服务器中的项目版本库,常见的远程仓库包括: GitHub、GitLab 或企业内部服务器等。远程仓库是团队成员之间实现代码共享、协作与数据同步的核心枢纽。开发者通过推送(push)操作将本地仓库的最新提交上传至远程仓库,或通过拉取(pull/fetch)操作获取他人的更新,完成分布式的协同开发。
Git数据流转过程
Git 的数据流转可概括为如下过程。所有工作均始于工作目录 ,开发者在此创建、修改或删除文件,此时这些变更尚未被 Git 正式记录。为了将变更纳入版本管理,首先需要通过 git add 命令,将工作目录中选定的文件或修改内容登记到暂存区 。当暂存区的内容经过确认后,执行 git commit 将这些暂存区的代码存入本地仓库 ,形成一条包含作者、时间戳及描述信息的不可变提交记录。若需要与团队共享代码或同步远程版本,开发者可以通过 git push 将本地仓库中的提交上传到远程仓库 ;反之,通过 git fetch 或 git pull 可以从远程仓库获取他人发布的最新提交,并同步回本地仓库及工作目录,供下一步开发使用。
由此,Git 形成了"工作目录 → 暂存区 → 本地仓库 → 远程仓库"的完整数据流转链路,使本地开发、版本记录与团队协作得以有序衔接。
Git中文件的状态
Git中的文件存在四种状态,详情如下:
Untracked :即文件未跟踪状态。表示该文件存在于工作区中,但尚未被 Git 跟踪,因此不参与版本控制。在此状态下,可通过 git add 将其状态变为 Staged。
Unmodified :即文件已提交至本地仓库,且本地仓库中的文件快照内容与工作区中的文件内容完全一致。该类型的文件有两种去向:如果文件被修改,则状态变为 Modified ;如果使用 git rm --cached 将文件移出版本控制,则文件重新变为 Untracked 状态。
Modified :即文件已修改状态,表示工作区中的文件内容已发生变化,但这些修改尚未加入暂存区。该文件有两个去向:通过 git add 进入 Staged 状态;或者使用 git restore 丢弃当前修改,恢复为 Unmodified 状态。旧版本 Git 中也可以使用 git checkout -- 文件名 完成相同操作。
Staged :即文件暂存状态,表示文件修改已被加入暂存区,准备参与下一次提交。执行 git commit 后,暂存区中的内容会被提交到本地仓库,此时本地仓库中的文件快照与工作区文件保持一致,文件状态变为 Unmodified 。在该状态下,如果执行 git restore --staged 取消暂存,则文件状态返回为 Modified 。旧版本 Git 中通常使用 git reset HEAD 文件名 完成该操作。
图示如下:
