第2章:Git基础入门——安装、配置与核心概念

各位同学,今天我们正式进入Git的世界。说实话,Git这东西,我刚入行时也觉得挺玄乎的。那时候我还在做单片机开发,代码全靠U盘拷来拷去,版本号靠文件夹命名——"v1.0_最终版_真最终版_打死不改版"。嗯,你们懂的。

直到有一次,我把一个改了三天的代码覆盖错了,整个项目回退不了。那天晚上我坐在工位上,盯着屏幕发呆。从那以后,我下定决心,必须把版本控制搞明白。今天这堂课,就是帮你打好Git的地基。

2.1 Git的安装与配置

先说说安装。Git支持三大主流操作系统,安装方式略有不同,但都不复杂。

Windows系统

去Git官网下载安装包,一路"Next"就行。我个人习惯在安装时勾选"Git Bash Here"选项,这样右键菜单里就能直接打开Git命令行,非常方便。

macOS系统

如果你装了Homebrew,一条命令搞定:

brew install git

没装Homebrew的话,去官网下载.dmg安装包也行。

Linux系统

Ubuntu/Debian系:

sudo apt-get install git

CentOS/RHEL系:

sudo yum install git

装完之后,验证一下:

git --version

能看到版本号,说明安装成功了。

配置你的身份

Git需要知道你是谁,因为每次提交代码都会记录作者信息。配置很简单:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

这里有个坑,我提醒一下:邮箱最好用你公司或GitHub上常用的那个,别随便填。我曾经有个同事填了个搞笑邮箱,结果代码评审时别人都找不到他,尴尬得很。

查看配置是否生效:

git config --list
小技巧: 如果你同时有公司项目和私人项目,可以用 --local 参数为每个仓库单独配置用户名和邮箱。我一般公司项目用公司邮箱,个人项目用私人邮箱,这样提交记录一目了然。

2.2 工作区、暂存区、仓库——三个核心概念

这三个概念,是理解Git的关键。说白了,它们就是代码的三个"状态房间"。

概念 通俗理解 对应目录
工作区(Working Directory) 你写代码的地方,就是你的项目文件夹 项目根目录
暂存区(Staging Area) 一个临时存放区,用来准备要提交的文件 .git/index
仓库(Repository) Git真正保存历史版本的地方 .git/objects

你想想看,这就像你写论文:

  • 工作区:你的草稿纸,随便写随便改
  • 暂存区:你把满意的几页挑出来,放在桌上准备交给老师
  • 仓库:老师收走存档,以后随时可以翻出来看

为什么要多一个暂存区?直接提交不行吗?

嗯,这个问题我当初也问过。后来在实际项目中才体会到:有时候你改了10个文件,但只想提交其中3个。暂存区让你可以精细控制每次提交的内容,而不是一股脑全塞进去。这在做代码评审时特别有用。

注意: 工作区的文件如果没有添加到暂存区,Git是不会追踪它的。换句话说,你改了文件但没 git add,那这个修改就不在版本控制范围内。我曾经有个同事改了一整天代码,结果忘了add,直接commit,发现提交了个寂寞...

2.3 常用命令——上手实操

命令不多,但每个都很关键。我们一个一个来。

git init —— 初始化仓库

进入你的项目目录,执行:

cd my_project
git init

这会在当前目录下生成一个隐藏的 .git 文件夹。这个文件夹就是Git的"心脏",里面存着所有版本信息。千万别手贱删掉它,否则版本历史就全没了。

git add —— 添加到暂存区

把文件从工作区放到暂存区:

git add main.c          # 添加单个文件
git add .               # 添加所有文件(慎用)
git add *.c             # 添加所有.c文件

我个人习惯用 git add -p,这个命令会交互式地让你选择每个文件的哪些改动要加入暂存区。对于大型改动,这个命令简直是神器。

git commit —— 提交到仓库

把暂存区的内容正式保存到仓库:

git commit -m "修复了定时器溢出bug"

提交信息一定要写清楚。我见过太多人写"update"、"fix"、"改了点东西"——这种信息等于没写。你想想看,三个月后你回来看提交记录,看到"改了点东西",你还能想起来改了啥吗?

提交信息规范(我个人的习惯):
- 第一行:简短描述(50字以内)
- 空一行
- 详细说明(可选)
示例:
fix: 修复ADC采样数据溢出问题
当采样率超过1kHz时,缓冲区索引会越界。
将缓冲区大小从256改为512,并添加边界检查。

git status —— 查看当前状态

这个命令我一天能用几十次。它告诉你:哪些文件改了、哪些在暂存区、哪些还没被追踪。

git status

输出示例:

On branch main
Changes not staged for commit:
  modified:   main.c

Untracked files:
  config.h

看到红色表示未暂存,绿色表示已暂存。嗯,这个颜色设计很直观。

git log —— 查看提交历史

想看之前都提交了啥?用这个:

git log

输出会显示每次提交的哈希值、作者、日期和提交信息。我习惯加几个参数让输出更清爽:

git log --oneline --graph --all

这样会以图形化的方式展示分支和提交历史,一目了然。

2.4 一个完整的操作流程

把上面这些串起来,一个典型的Git工作流是这样的:

# 1. 初始化仓库
git init

# 2. 创建或修改文件(工作区)
echo "int main() { return 0; }" > main.c

# 3. 查看状态
git status

# 4. 添加到暂存区
git add main.c

# 5. 再次查看状态(应该变绿了)
git status

# 6. 提交到仓库
git commit -m "初始化项目,添加main.c"

# 7. 查看提交历史
git log --oneline

这个流程你多练几次,就会形成肌肉记忆。我在带新人时,要求他们前两周每天至少执行这个流程20遍。不是为了折磨人,而是让这些命令变成条件反射。

避坑指南: 我曾经在嵌入式项目中,因为忘了写 .gitignore 文件,把编译生成的 .o 文件和 .hex 文件都提交到了仓库。结果仓库变得巨大无比,clone一次要等半天。后来我养成了习惯:git init 之后第一件事,就是创建 .gitignore 文件,把编译产物、IDE配置文件、临时文件统统排除在外。

好了,今天的内容就到这里。Git的基础概念和命令,说白了就是"工作区改代码 → 暂存区挑文件 → 仓库存历史"这三步。你只要把这个流程刻在脑子里,后面学分支、合并、远程仓库什么的,都会轻松很多。

下一章我们讲分支管理——这可是Git最强大的功能之一。到时候我会分享一个我亲身经历的"分支混乱导致项目延期"的惨痛教训,保证让你印象深刻。