2、Git核心概念:工作区、暂存区、本地仓库、远程仓库的概念与关系

说实话,我刚接触Git那会儿,最头疼的就是这四个区。工作区、暂存区、本地仓库、远程仓库——名字听着就绕。但你要是搞懂了它们之间的关系,Git基本上就学会了一半。

我习惯把这四个区想象成「写作业→检查→提交→分享」的过程。你想想看,是不是很形象?

2.1 工作区(Working Directory)

工作区就是你电脑上能看到的那个文件夹。你在里面写代码、改文件、删文件,所有操作都发生在这里。

说白了,工作区就是你的「草稿纸」。你可以在上面随便画、随便改,没人管你。但要注意——工作区里的改动,Git并不会自动帮你保存历史版本。

重要概念:工作区里的文件有两种状态:

  • 已跟踪(Tracked):已经被Git管理起来的文件
  • 未跟踪(Untracked):新创建的、Git还不知道的文件

我在项目中遇到过好几次这样的情况:同事在本地改了一堆代码,结果电脑坏了,全丢了。为什么?因为他只改了工作区,根本没提交到仓库。嗯,这就是血的教训。

2.2 暂存区(Staging Area / Index)

暂存区是个很有意思的设计。它就像一个「候车室」——你先把要提交的文件放进去,等准备好了再一起发车。

为什么要多此一举?直接提交不行吗?

我刚开始也觉得麻烦。后来做项目时发现,有时候你改了5个文件,但只想提交其中3个。如果没有暂存区,你就得把所有改动都打包提交,或者用很麻烦的方式挑出来。有了暂存区,你可以用 git add 精挑细选,想提交哪个就提交哪个。

我的习惯:每次提交前,我都会用 git status 看看暂存区里放了什么。确认无误后再提交。这能避免很多手误。

2.3 本地仓库(Local Repository)

本地仓库就是藏在 .git 文件夹里的那个数据库。你执行 git commit 之后,暂存区里的内容就会被打包成一个「快照」,永久保存在本地仓库里。

你可以把本地仓库理解成你的「私人日记本」。所有提交记录都写在这里,只有你自己能看。就算没有网络,你也能正常提交、查看历史、回退版本。

注意:本地仓库虽然安全,但也不是万无一失的。硬盘坏了、误删了 .git 文件夹,你的历史记录就全没了。我曾经有个同事,直接把项目根目录的 .git 删了,然后问我「为什么Git不认我的项目了?」——嗯,那场面,我至今记忆犹新。

2.4 远程仓库(Remote Repository)

远程仓库就是放在服务器上的那个版本库,比如 GitHub、GitLab、Gitee 上的项目。它相当于你的「共享日记本」——所有人都能看到,所有人都能往上面提交。

远程仓库解决了两个核心问题:

  • 备份:本地仓库挂了,远程仓库还在
  • 协作:大家都能拉取、推送代码

我建议你养成一个习惯:每天下班前,把当天的改动 git push 到远程仓库。这样就算电脑出问题,你的工作成果也不会丢。

2.5 四个区的关系

这四个区的关系,说白了就是一条流水线:

工作区 → git add → 暂存区 → git commit → 本地仓库 → git push → 远程仓库

反过来,从远程仓库拉取代码:

远程仓库 → git pull → 本地仓库 → git checkout → 工作区

为了让你更直观地理解,我画了一张图:

工作区 Working Directory git add 暂存区 Staging Area git commit 本地仓库 Local Repo git push 远程仓库 Remote Repo git pull Git 四个核心区域的关系 实线:推送方向 | 虚线:拉取方向

2.6 常用命令速查

操作 命令 说明
查看状态 git status 看看工作区和暂存区有什么变化
添加到暂存区 git add 文件名 把文件放进「候车室」
提交到本地仓库 git commit -m "说明" 把暂存区的内容打包保存
推送到远程仓库 git push 把本地仓库的内容同步到服务器
拉取远程仓库 git pull 把远程仓库的最新内容下载到本地

一个小技巧:如果你不确定当前文件在哪个区,就用 git status 看一下。红色表示在工作区,绿色表示在暂存区。这个习惯我保持了好几年,从来没出过岔子。

2.7 避坑指南

我曾经犯过一个低级错误:在暂存区里放了几个文件,然后直接改了工作区里的同名文件,接着又 git add 了一次。结果暂存区里存的是第二次添加的版本,第一次的改动被覆盖了。

所以我的建议是:

  • 改完文件后,先 git status 确认一下
  • 再 git add 到暂存区
  • 最后 git commit 提交

顺序别搞反了,不然容易丢改动。

另外,git push 之前一定要先 git pull。我见过太多人直接 push,结果因为远程仓库有更新而冲突,搞得手忙脚乱。记住:先拉后推,稳如老狗。


可可精品资料库