(最新版)Git&GitHub实操图文详解教程(03)—Git工作原理


版权声明


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 文件名 完成该操作。

图示如下:

相关推荐
wflynn1 小时前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
用户别睡觉2 小时前
五大 RAG 开源项目对比 2026:Dify、RAGFlow、FastGPT、AnythingLLM、LightRAG
github
用户7273744138842 小时前
在 Windows 11 上从零装好 Carapace BIN:一次真实操作记录
github
miofly4 小时前
Claude Sonnet 5自主选药选坐标完成小鼠脑部手术,更强模型拒绝执行
开源·github
塞讯科技4 小时前
13,500 个分支被植入窃密工作流:Gheist 如何用 GitHub 令牌搬走仓库密钥
网络安全·ai·github·软件供应链安全·供应链投毒
echome8887 小时前
Git 日常救急:撤销提交、找回误删文件和解决冲突
git·版本控制
阿智的AI开发笔记9 小时前
充了 200 块只跑出 3 条:AI 视频真正贵的地方,是「按次」和「按秒」的区别
github
GitHub实测笔记9 小时前
rtk 本机实测:给 AI Agent 砍掉 90% 的命令行噪音(Linux)
github
小莫4619 小时前
CI 全绿了,测试却可能是假的:GitHub Actions 三个静默失效的坑
github
dreams_dream11 小时前
项目想要推送多个平台仓库的方法
gitee·github