(最新版)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 文件名 完成该操作。

图示如下:

相关推荐
Madison-No729 分钟前
多语言聊天大模型--测试报告
linux·git·python·selenium·jmeter·自动化·postman
TunerT_TQ37 分钟前
开源评测】openai/math 深度拆解:722 份 AI 数学手稿与 Lean 形式化的工程真相
github
W.A委员会39 分钟前
PID自动整定与LLM调优项目使用说明(源码附文末)
自动化·github
小此方1 小时前
「插曲:Git」多人协作篇:远程分支创建与关联、多人协作冲突解决、Feature分支开发与合并、git remote prune清理失效分支
git
m4Rk_1 小时前
【论文阅读】Agent 记忆机制(96):M3-Agent——让 Agent 从视听经历中持续形成情景与语义长期记忆
论文阅读·人工智能·学习·开源·github
粥里有勺糖2 小时前
安利一下最近用的桌面“Agent” | T3 Code
前端·github·ai编程
可乐ea3 小时前
Git 基础设施重建:智能体规模开发下的读写解耦
大数据·git·elasticsearch·分布式存储·git基础设施·智能体规模开发·读写解耦
粥里有勺糖3 小时前
视野修炼第136期 | 前端小恐龙"Deno"被收购
前端·github·ai编程
怕浪猫4 小时前
Agent 工程化面试:从开发到部署的 5 个关键问题
面试·架构·github
高频因子挖掘机4 小时前
历史 K 线突然少一天?用交易日历、停牌信息和数据校验逐步排查
后端·github·api