Git 简介与历史
在动手装环境之前,我们先认识一下 Git 到底是什么、为什么每个程序员都要学它、它是怎么诞生的。理解了背景,后面学命令时会更有的放矢。
Git 是什么?
Git 是一款分布式版本控制系统(Distributed Version Control System, DVCS)。简单说,它是一个"时光机 + 协作中枢":能记录你项目里每一个文件的每一次修改,随时回到任意历史版本,还能让几十、几百人同时开发同一个项目而不互相覆盖。
如果你写过代码,一定体会过这种恐惧:"刚才删的那段代码,万一以后要用呢?"——于是 main_final_v2_真的最终版.py 满天飞。Git 就是为终结这种混乱而生:你只需要 commit(提交),它就帮你存一个快照,随时能回退、能对比、能分支。
诞生故事:Linus 的两周杰作
Git 的诞生有点戏剧性。它的作者 Linus Torvalds 同时也是 Linux 之父。2002 年到 2005 年间,Linux 内核社区使用一款商业版本控制工具 BitKeeper,BitKeeper 公司免费给开源社区使用。但 2005 年,社区里有人尝试反向工程 BitKeeper 的协议,BitKeeper 公司一怒之下撤销了免费许可。
当时没有现成的分布式版本控制工具能满足 Linux 内核的需求(超大规模、几万名贡献者、超高频合并)。Linus 一怒之下,决定自己写一个。他在 2005 年 4 月 3 日开始动手,仅仅用了大约两周就写出了 Git 的核心,4 月 7 日 Linux 内核源码就开始用 Git 管理。Linus 后来回忆说,他的目标只有一个:
- 能像 Linux 内核这样超大规模的项目也能流畅协作;
- 速度要快,合并分支、看历史都不能卡;
- 分布式,每个开发者本地都有完整历史,断网也能工作;
- 防篡改,提交一旦写入,哈希保证内容不可伪造。
Git 这个名字是 Linus 自己起的,他自嘲说:"我是个骄傲的混蛋,我把我所有项目都命名为自己。Git 在英国俚语里就是'令人不快的人'。"——和 Linux、Linux 一样,都带他的名字。但这个"自黑"的名字很快超越了内核圈。
分布式 vs 集中式
要理解 Git 的革命性,得对比一下老一代的集中式版本控制系统(如 SVN、CVS)。它们有一个"中央服务器",所有历史都存在服务器上,开发者每次操作都要联网:
- 集中式(SVN):历史只在中央服务器,断网无法 commit/log;服务器宕机,全队停工;分支代价昂贵(复制整个目录)。
- 分布式(Git):每个开发者本地都是完整仓库,包含全部历史;断网也能 commit、看 log、开分支;服务器只是大家"同步"的中转,挂了随便换一个。
这就是为什么 Git 在 2008 年 GitHub 上线后彻底引爆——它把"版本控制"从痛苦变成了享受。
Git 的三大设计亮点
- 快照而非差异:老版本控制系统存的是"这次相比上次改了哪几行",而 Git 每次提交存的是项目那一刻的完整快照(对未变文件只存引用,所以并不慢)。这让回退、分支、合并都极快。
- 分支极轻:在 Git 里,分支只是一个"指向某个提交的指针",创建分支就是新建一个 41 字节的指针文件,几乎零开销。这是 Git 区别于 SVN 的最大杀手锏。
- 内容寻址(CSHA):每个提交、每个文件内容都用 SHA-1(现已支持 SHA-256)哈希作为唯一 ID。改一个字节,哈希就变,因此历史不可篡改——这正是区块链的核心思想,而 Git 比区块链早了很多年。
核心概念:三个区域与三种状态
理解 Git 最关键的一步,就是搞懂它的三个区域。这是新手最容易迷糊、但搞懂后就一通百通的概念:
- 工作区(Working Directory):你眼睛看到的文件夹,直接编辑的文件就在这里。状态是已修改(modified)。
- 暂存区(Staging Area / Index):用
git add把工作区的改动"标记为待提交"。状态是已暂存(staged)。 - 仓库(Repository):用
git commit把暂存区的改动"永久写入历史"。状态是已提交(committed)。
为什么要分三步?因为很多时候你改了 5 个文件,只想提交其中 3 个——暂存区让你能精细挑选哪些改动进这一次提交,让历史更清晰、更有意义。
# Git 的三个区域:工作区 → 暂存区 → 仓库
#
# 1. 工作区(Working Directory)
# 你眼睛看到的文件夹,直接编辑的文件就在这里
echo "hello" > a.txt # 在工作区新建/修改文件
# 2. 暂存区(Staging Area / Index)
# 用 git add 把工作区的改动"标记为待提交"
git add a.txt # a.txt 进入暂存区
# 3. 仓库(Repository)
# 用 git commit 把暂存区的改动"永久写入历史"
git commit -m "add a.txt" # 改动永久进入仓库
# 查看当前状态:哪些文件在哪个区
git statusGitHub 与 Git 的关系
新手常把 Git 和 GitHub 混为一谈。其实它们是两回事:
- Git是命令行工具,装在你电脑上,管理本地仓库。
- GitHub是一家公司(2008 年上线),提供远程仓库托管 + 社交功能(fork、star、PR)。它是 Git 的"云服务",但 Git 不依赖 GitHub——你也可以用 GitLab、Gitee、Bitbucket,甚至自己搭一个。
打个比方:Git 是录音机,GitHub 是网易云音乐。你可以用录音机自己录,也可以上传到网易云分享给全世界。今天 GitHub 上托管着超过 4 亿个仓库,是全球最大的程序员社区。
学完 Git 能做什么?
- 个人项目:再也不用 main_v2_final.py,每次改动都有据可查、随时回退。
- 团队协作:多人同时开发一个项目不冲突,通过 Pull Request 做代码评审。
- 参与开源:给 Linux、React、Vue 等项目贡献代码,GitHub 是必经之路。
- 部署发布:用 tag 标记版本,用分支管理发布,这是现代 DevOps 的基础。
← 返回 Git 教程目录
下一篇 Git 安装与配置 →