写代码最怕两件事:改着改着把能跑的版本改崩了,却找不到回去的路;或者和同事同时改一个文件,最后谁的代码被覆盖都搞不清。Git 就是来解决这两个痛点的——它像给代码装了一个”时间机器”,又像一个”多人共编的合并器”。
你可以把 Git 想成文档的”无限次撤销键”加”自动备份云”。每次你觉得”这版不错”,就拍一张快照存起来;以后任何时候想回到某一张快照,一条命令就能还原。多人协作时,每个人的快照还能智能合并,不会互相踩脚。
什么是版本控制
版本控制(Version Control) 就是记录文件每次变化的系统。没有它,你可能会看到这样的文件夹:报告最终版.doc、报告最终版2.doc、报告真的最终版.doc、报告改不动了.doc——这叫”人肉版本控制”,既乱又容易丢。
Git 是当下最主流的分布式版本控制系统。分布式意味着:每个人的电脑上都有一份完整的仓库副本(包括全部历史),不依赖某个中央服务器也能工作。哪怕服务器炸了,随便一个人的电脑都能恢复全部历史。
第一步:安装 Git
不同系统装法不同,但都很简单:
# macOS(装了 Homebrew 的话)
brew install git
# Ubuntu / Debian
sudo apt update && sudo apt install git
# Windows:去 git-scm.com 下载安装包,一路下一步即可
装完验证一下:
git --version
# 输出类似 git version 2.45.0 就说明装好了
第二步:第一次配置(只做一次)
Git 每次提交都会记下”谁提交的”。所以第一次要先告诉它你的名字和邮箱:
git config --global user.name "你的名字"
git config --global user.email "you@example.com"
--global 表示这是全局配置,对这台电脑上所有仓库生效。如果某个项目想用不同的身份,进到那个仓库目录,把 --global 换成 --local 再设一次即可。
还可以顺手设置默认分支名和喜欢的编辑器:
git config --global init.defaultBranch main
git config --global core.editor "code --wait" # 用 VS Code 当提交信息编辑器
第三步:理解三个区域(核心认知)
Git 最关键的认知是三个区域,很多新手绕晕就是没搞懂这个:
- 工作区(Working Directory):你当前能看到、正在编辑的文件夹。你
git init之后,在这个目录里新建、修改的文件都先待在这里。 - 暂存区(Staging Area / Index):一个”待提交清单”。你把工作区里想保存的改动
add进来,相当于告诉 Git”这些改动我确认要存档”。 - 版本库(Repository /
.git):git commit之后,暂存区的内容被永久拍成一张快照,存进这里。.git文件夹就是仓库的”大脑”,千万别手删。
一个好懂的比喻:工作区是厨房(正在切菜备料),暂存区是装盘(把做好的菜摆上盘),版本库是拍照留念(把这一桌菜拍下来存相册)。你不会每切一刀就拍张照,而是菜备好了、装好盘,才统一拍一张。
第四步:初始化仓库
进入你的项目目录,初始化:
cd my-project
git init
# 输出:Initialized empty Git repository in .../.git/
这条命令就在当前目录建了一个 .git 文件夹,仓库就建好了。此时它还是空的,没有任何快照。
第五步:看看现在什么状态
git status
它会告诉你:哪些文件被改了(在工作区)、哪些已放进暂存区待提交。新手养成习惯——做任何 Git 操作前后都 git status 看一眼,能避免绝大多数误操作。
常见新手坑
- 忘了
git config就提交:Git 会报错或用默认身份,导致提交记录作者不对。 - 把
.git当普通文件夹乱删:那是仓库历史,删了就回不到任何历史版本了。 - 在错误目录
git init:可能在桌面或家目录初始化了仓库,导致满屏文件都被 Git 跟踪。用git status确认当前目录再操作。 - 以为
git init会自动保存文件:它只是建了仓库,文件还在工作区,需要add+commit才进版本库。
小测验
- 问题1:分布式版本控制和集中式最大的区别是什么?答案:每个人本地都有完整历史,不依赖中央服务器也能工作。
- 问题2:
git config --global和--local有什么区别?答案:前者对整台电脑所有仓库生效,后者只对当前仓库生效。 - 问题3:工作区的文件改了,但还没
add,git status会把它归到哪一类?答案:归到”未暂存(not staged)“的修改里。
更多实战:从零走一遍完整闭环
光看不练记不牢,我们来真的走一遍。打开终端,建个练习目录:
mkdir git-practice && cd git-practice
git init
echo "# 我的练习仓库" > README.md
git status # README.md 显示为未跟踪(红色)
git add README.md # 加入暂存区
git commit -m "chore: 初始化项目说明"
git log --oneline # 看到刚才那条提交
走完这四步,你就完成了”初始化 → 暂存 → 提交 → 查看”的完整闭环。以后每篇提到的命令,都建议这样当场敲一遍,比读十遍记得牢。
图形化工具:命令行之外的解法
如果你暂时抗拒命令行,也有图形工具能做同样的事:
- GitHub Desktop:官方出品,界面友好,提交、分支、合并点点鼠标就行,适合纯新手过渡。
- VS Code 内置 Git:左侧”源代码管理”视图,改动、提交、推送都能在编辑器里完成(前面编辑器篇讲过)。
- SourceTree:功能全面的免费 Git 客户端。
但要提醒:图形工具底层还是 Git 那套概念(暂存区、提交、分支)。先理解命令行逻辑,再用图形工具,才不会被它”自动帮你做决定”搞晕——很多”莫名其妙的合并”正是图形工具替你做了你没意识到的操作。
自测:你真的懂了吗
- 为什么
git init后文件不会自动进版本库?答案:文件还在工作区,必须add进暂存区再commit才进版本库。 - 三个区域各自管什么?答案:工作区编辑中、暂存区待提交清单、版本库永久快照。
- 如果误删了工作区还没提交的文件,能从 Git 恢复吗?答案:不能,因为从未提交过;所以改动要及时提交。
常见认知误区
新手对 Git 有几个典型误会,提前说清能少走弯路。第一,以为 git init 会自动保存文件——其实它只建仓库,文件仍在工作区,必须 add 加进暂存区、commit 才进版本库,漏了任何一步都回不去。第二,以为提交是给单个文件拍快照——其实一次 commit 是对”整个暂存区当前状态”拍一张整体照,所以提交前要想清楚这次该包含哪些改动。第三,以为 Git 能防误删——对于从未提交过的文件,删了就是删了,Git 救不了,所以改动养成及时提交的习惯。第四,以为分支很重——Git 的分支只是个轻量指针,开几十条也不占多少空间,放心用,别舍不得开。
这一篇你该记住的
- Git 是分布式版本控制,给代码提供”撤销/回溯”和”多人协作合并”两大能力。
- 三个区域:工作区(编辑中)→ 暂存区(待提交清单)→ 版本库(永久快照)。
- 首次使用先
git config --global user.name/email。 git init初始化仓库,git status随时查看状态。- 提交前必须
add到暂存区,再commit才进版本库。
下一篇我们讲 提交:怎么把改动真正存进版本库、怎么写让人看得懂的提交说明、怎么回看历史——这是你每天都会用到的动作。