第二章:Git入门——从零开始搭建你的版本控制世界

各位工程师,欢迎来到Git入门这一章。说实话,Git这东西,我刚入行时也觉得挺玄乎的。那时候我还在做嵌入式固件开发,代码改来改去,最后分不清哪个版本是能用的。直到有一次,我把一个调试好的剃须刀马达控制程序改崩了,却找不到回退的办法……嗯,从那以后,我老老实实学了Git。

今天我们就从最基础的东西讲起。你不需要有任何Git基础,跟着我一步步来就行。

2.1 Git的安装与配置

先说说安装。Git支持Windows、macOS和Linux。我个人习惯在Windows上用Git Bash,在Linux上直接用终端。

Windows安装:

  • 去Git官网下载安装包,一路默认选项就行
  • 安装完成后,右键菜单里会出现"Git Bash Here"
  • 我建议勾选"将Git添加到PATH环境变量"

Linux安装:

sudo apt-get install git   # Ubuntu/Debian
sudo yum install git       # CentOS/RHEL

macOS安装:

brew install git   # 用Homebrew安装

装好之后,第一件事就是配置你的身份信息。这很重要,因为每次提交代码都会记录你是谁。

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

💡 我个人习惯用公司邮箱,这样提交记录里能清楚看到是谁改的代码。曾经有个同事用了私人邮箱,后来查bug时根本对不上人,那叫一个头疼。

配置完成后,可以用下面命令查看所有配置:

git config --list

你还可以设置默认的文本编辑器,比如我习惯用VSCode:

git config --global core.editor "code --wait"

2.2 Git工作区与仓库的概念

理解Git的工作区概念,是入门的关键。说白了,Git把我们的项目分成了三个区域:

区域名称 说明 类比
工作区(Working Directory) 你电脑上能看到的文件夹 你的工作台
暂存区(Staging Area) 临时存放待提交的修改 你的待办清单
仓库(Repository) Git保存所有历史版本的地方 你的档案柜

为什么会这样设计?你想想看,如果你每次改一个文件都要立刻存档,那多麻烦。Git给了你一个缓冲地带——暂存区。你可以先改一堆文件,挑出那些改好了的、想提交的,放到暂存区,最后一次性提交到仓库。

🔑 核心理解:工作区是你正在修改的地方,暂存区是你准备提交的地方,仓库是永久保存的地方。

我在项目中遇到过这样的情况:一个同事改了好几个文件,结果不小心把没改完的代码也提交了。后来我教他先用git add把改好的文件挑出来,再提交。从那以后,他再也没犯过这种错。

2.3 Git基本操作

好,现在我们来动手。假设你有一个剃须刀嵌入式软件项目,文件夹名叫shaver_firmware

2.3.1 git init —— 初始化仓库

进入你的项目文件夹,执行:

cd shaver_firmware
git init

这条命令会在当前目录下创建一个隐藏的.git文件夹。这个文件夹就是你的仓库。嗯,这里要注意:.git文件夹千万别乱删,否则你的版本历史就全没了。

⚠️ 我曾经见过有人把.git文件夹当成垃圾删掉了,结果整个项目的版本历史全部丢失。切记:.git是Git的心脏。

2.3.2 git status —— 查看当前状态

初始化完成后,你可以随时用git status查看当前工作区的状态:

git status

它会告诉你:哪些文件被修改了,哪些文件还没被跟踪,哪些文件在暂存区里。我几乎每改几个文件就会跑一次git status,就像看仪表盘一样。

2.3.3 git add —— 把文件加入暂存区

假设你新建了一个main.c文件,想把它纳入版本管理:

git add main.c

你也可以一次性添加所有修改过的文件:

git add .

但我个人建议,刚开始学的时候,一个一个加。为什么?因为git add .会把所有改动都加进去,万一你有个临时测试文件,也会被加进去。我曾经有一次不小心把编译生成的.o文件也加进去了,后来仓库变得特别大。

💡 避坑指南:我建议在项目根目录创建一个.gitignore文件,把编译产物、临时文件等写进去。这样git add .就不会误加这些文件了。

2.3.4 git commit —— 提交到仓库

文件加到暂存区后,就可以提交了:

git commit -m "添加了马达控制模块的初始代码"

-m后面跟的是提交信息。这个信息很重要,它记录了这次提交做了什么。我见过有人写"修改了一些东西"或者"fix bug",这种信息等于没写。你想想看,三个月后你回来看这段历史,能想起来改了啥吗?

🔑 好的提交信息格式:动词 + 修改内容 + 原因(可选)

例如:"修复了马达PWM频率计算错误,导致转速不稳定的问题"

如果你不加-m,Git会打开默认编辑器让你写多行提交信息。我习惯用这种方式写更详细的说明:

git commit

然后编辑器里会显示:

# 请为你的变更输入提交说明。以 '#' 开始的行将被忽略。
# 空提交说明将会终止提交。

你可以写多行,第一行是标题,空一行后写详细说明。

2.3.5 完整的操作流程

把上面几个命令串起来,就是一个完整的Git工作流:

# 1. 初始化仓库
git init

# 2. 查看状态
git status

# 3. 添加文件到暂存区
git add main.c
git add motor_control.c

# 4. 再次查看状态,确认暂存区内容
git status

# 5. 提交到仓库
git commit -m "添加了马达控制和主循环模块"

这个流程,说白了就是:改代码 → 挑出要提交的 → 写个说明 → 存档。我每天要重复这个流程几十次,已经形成肌肉记忆了。

2.4 避坑指南与个人经验

最后,分享几个我踩过的坑:

  • 不要用git commit -a偷懒:这个命令会跳过暂存区,直接提交所有修改。但如果你有不想提交的文件,就麻烦了。我建议老老实实走add + commit两步。
  • 提交要频繁,但要有意义:每完成一个功能点就提交一次,不要攒了一堆改动才提交。这样回退时能精确到某个小改动。
  • 提交信息要写中文:团队里大家都用中文,就别装洋气写英文了。清晰易懂最重要。

⚠️ 我曾经犯过一个低级错误:在git commit之后,发现漏了一个文件,就直接修改了那个文件,然后以为它会被包含在上次提交里。结果并没有。正确的做法是:git add漏掉的文件,然后用git commit --amend把修改合并到上一次提交中。

好了,Git入门的内容就讲到这里。下一章我们会深入讲分支管理,那才是Git真正强大的地方。你先把这个基础流程练熟,每天用几次,一周后你就会发现——没有Git的日子简直没法干活。