4、Git基础操作:从零开始掌控代码版本
说实话,我见过太多嵌入式工程师还在用「项目_v1_最终版_改3.rar」这种命名方式。嗯,每次看到我都想叹气。Git 这东西,说白了就是给你的代码装上一台时光机。今天咱们就把最核心的七个命令讲透。
4.1 git init:让一个普通文件夹变成仓库
你有一个项目文件夹,里面全是 .c 和 .h 文件。怎么让 Git 开始管理它?
cd my_embedded_project
git init
就这么简单。执行后,文件夹里会多出一个隐藏的 .git 目录。这就是 Git 的「大脑」——所有版本信息都存这里。
我个人习惯是:新建项目第一件事就是 git init。哪怕还没写代码,先建仓库再说。养成习惯,后面省大事。
4.2 git clone:把别人的代码搬到自己电脑上
你从 GitHub 或者公司 GitLab 上看到一个项目,想拿下来改改?
git clone https://github.com/example/stm32_driver.git
这条命令会做三件事:
- 在本地创建一个同名文件夹
- 把远程仓库的所有代码下载下来
- 自动建立远程跟踪分支
说白了,就是「一键复制整个项目」。我在项目中遇到过最坑的情况是:有人用 git clone 时没注意网络环境,下载到一半断了,然后手动去复制文件。结果 .git 目录不完整,后面 push 全是冲突。记住:clone 必须完整执行完,中途断了就删掉重来。
4.3 git add:把修改「放进篮子」
你改了几个文件,想让 Git 记住这些改动。但 Git 不会自动跟踪所有文件——你得告诉它「我要管这个」。
# 添加单个文件
git add main.c
# 添加所有改动的文件
git add .
# 添加当前目录下所有 .c 文件
git add *.c
这里有个概念叫「暂存区」。你可以把 git add 理解为:把文件放进一个临时篮子,还没正式打包。
git add . 一股脑全加。我会用 git status 先看看改了哪些,然后一个一个加。为什么?因为有时候你改了个调试用的临时文件,不小心加进去就尴尬了。
4.4 git commit:给代码拍一张快照
这是 Git 最核心的操作。你改完一段功能,觉得「嗯,这个版本可以了」,就拍一张快照。
git commit -m "修复了UART接收中断的溢出bug"
每次 commit 都会生成一个唯一的 SHA-1 哈希值。这就是你的「版本号」。
关于 commit message,我有三条铁律:
- 用中文写,团队里大家都看得懂
- 说清楚「做了什么」,而不是「做了什么文件」
- 控制在50字以内,太长的拆成多行
4.5 git status:随时看看仓库状态
这是我最常用的命令,没有之一。一天能敲几十遍。
git status
它会告诉你三件事:
- 哪些文件被改了但还没 add
- 哪些文件已经 add 了但还没 commit
- 有没有新增的文件还没被跟踪
输出结果会用颜色区分:红色表示未跟踪或已修改,绿色表示已暂存。嗯,看一眼就清楚。
我个人习惯是:每次 commit 之前,先 git status 确认一下。别漏了文件,也别多加了不该加的东西。
4.6 git log:翻翻历史记录
你想看看之前都提交过什么?
# 查看完整历史
git log
# 只看最近3条
git log -3
# 一行显示一条,更清爽
git log --oneline
输出会显示:commit 哈希值、作者、日期、提交信息。这就是你的项目「日记本」。
git log --oneline --graph 可以看分支图。我在项目中排查问题时,经常靠这个图来理清「哪个分支先合并的」「哪个提交引入了 bug」。
4.7 git diff:看看具体改了啥
git status 告诉你「改了哪些文件」,但没告诉你「具体改了哪一行」。这时候就需要 git diff。
# 查看工作区和暂存区的差异
git diff
# 查看暂存区和上次commit的差异
git diff --staged
# 比较两个commit之间的差异
git diff commit1_hash commit2_hash
输出会用 + 和 - 标记新增和删除的行。绿色表示新增,红色表示删除。
我记得有一次,一个同事说「我就改了一行代码」,结果 git diff 一看,改了三十行。为什么?因为他把缩进全改了。所以我现在每次 commit 前,都会 git diff 扫一眼,确认改动范围。
总结一下这七个命令的关系
| 命令 | 作用 | 使用频率 |
|---|---|---|
| git init | 创建新仓库 | 每个项目一次 |
| git clone | 复制远程仓库 | 每个项目一次 |
| git add | 将改动放入暂存区 | 每天多次 |
| git commit | 将暂存区内容生成版本 | 每天多次 |
| git status | 查看当前仓库状态 | 非常频繁 |
| git log | 查看提交历史 | 经常 |
| git diff | 查看具体改动内容 | 经常 |
这七个命令,就是 Git 的「七种武器」。你不需要一开始就记住所有参数,先把这七个用熟。后面那些高级操作,都是在这基础上搭积木。
嗯,下一章咱们聊聊分支管理。那才是 Git 真正强大的地方。