4、Git基本操作:git init、git add、git commit、git status、git log的使用

说实话,很多刚接触版本控制的FPGA工程师,一上来就被各种命令吓住了。其实Git的核心操作就那么几个,翻来覆去用的就是今天要讲的这五条命令。我个人习惯把这五条命令称为「Git的起手式」,就像下围棋要先学会落子一样。

Git 基本操作核心流程 工作区 你的项目文件夹 暂存区 准备提交的变更 本地仓库 历史记录 git add git commit git status 查看当前状态 git log 查看提交历史 git init 初始化仓库 核心工作流 git init → git add → git commit git status(随时检查) + git log(随时回顾)

4.1 git init —— 一切从这里开始

你想想看,一个FPGA项目从零开始,第一步是什么?不是写代码,而是先建仓库。git init就是干这个的。

cd /home/projects/my_fpga_project
git init

执行完这条命令,你的项目文件夹里会多出一个隐藏的.git目录。嗯,这里要注意:这个目录就是Git的心脏,里面存着所有版本信息。删了它,版本历史就全没了。

⚠️ 我曾经... 有个同事把整个.git目录复制到U盘里,结果U盘坏了,三个月的工作成果全丢了。所以记住:.git目录要定期备份,或者推送到远程仓库。

我个人习惯在新建FPGA项目的第一时间就执行git init,哪怕文件夹里只有一个空的README文件。为什么?因为越早开始版本控制,后面越省心。

4.2 git status —— 你的项目体检报告

git status是我用得最频繁的命令,没有之一。它告诉你三件事:

  • 哪些文件被修改了(但还没暂存)
  • 哪些文件被暂存了(但还没提交)
  • 哪些文件没有被Git跟踪
$ git status
On branch main
Changes not staged for commit:
  modified:   src/top.v
  modified:   constraints/timing.xdc

Untracked files:
  src/testbench/

看到红色文件了吗?那是还没暂存的修改。绿色文件是已经暂存的。说白了,红色是「待处理」,绿色是「已就绪」。

💡 小技巧: 我建议每次提交前都跑一遍git status,确认自己到底改了哪些文件。有一次我差点把一个没调试完的testbench提交上去,还好git status救了我。

4.3 git add —— 把文件请进暂存区

git add就是把你的修改「打包」起来,准备提交。你可以选择性地添加文件:

# 添加单个文件
git add src/top.v

# 添加整个目录
git add src/

# 添加所有变更(慎用!)
git add .

我在项目中遇到过一个问题:有个同事习惯用git add .,结果把编译生成的临时文件也加进去了。那些文件又大又没用,搞得仓库臃肿不堪。所以我的建议是:

  • FPGA项目一定要配.gitignore文件,把.o.jou.logvivado*这些临时文件排除掉
  • 提交前用git status确认一下,别一股脑全加进去
🔑 核心原则: 每次提交只做一件事。比如「修复了FIFO的时序问题」就只提交相关的.v文件和.xdc文件,别把其他模块的修改混进来。

4.4 git commit —— 给历史打个快照

git commit就是把暂存区的修改永久保存到仓库里。每次提交都会生成一个唯一的SHA-1哈希值,就像给历史打了个标签。

git commit -m "修复了FIFO读指针的跨时钟域同步问题"

关于提交信息,我有几条铁律:

  1. 用中文写 —— 团队协作时,中文比英文更容易理解
  2. 说清楚「为什么」 —— 别写「修改了top.v」,要写「优化了AXI接口的握手逻辑,解决了死锁问题」
  3. 控制在50字以内 —— 太长的信息在git log里显示不全
⚠️ 避坑指南: 我曾经见过有人提交信息写「改bug」、「更新」、「test」这种毫无意义的内容。三个月后回来看,根本不知道那次提交改了啥。你想想看,要是项目出了时序问题,需要回滚到某个版本,这种提交信息能帮你找到正确的版本吗?

4.5 git log —— 翻阅项目的历史档案

git log就像一本日记,记录了你所有的提交历史。基本用法:

git log

commit a1b2c3d4e5f6...
Author: Zhang San <zhangsan@example.com>
Date:   Mon Mar 10 14:30:00 2025 +0800

    修复了FIFO读指针的跨时钟域同步问题

commit f6e5d4c3b2a1...
Author: Li Si <lisi@example.com>
Date:   Sun Mar 9 10:15:00 2025 +0800

    添加了UART模块的初始实现

我个人习惯用这些参数让输出更清晰:

命令 作用 我的使用场景
git log --oneline 每行只显示一个提交 快速浏览历史,找某个提交
git log --graph 显示分支合并图 查看分支结构,理清合并关系
git log -p 显示每次提交的差异 审查代码变更,找bug引入点
git log --author="Zhang" 只看某人的提交 团队协作时,查某个同事的工作
💡 实用技巧: 在FPGA项目中,我经常用git log --oneline -5只看最近5次提交。配合git show <commit-id>查看具体改了哪些代码,排查问题非常高效。

4.6 实战:一个完整的FPGA项目提交流程

好了,理论说完了,咱们来走一遍实际流程。假设你正在开发一个SPI控制器:

# 1. 初始化仓库
cd spi_controller
git init

# 2. 创建.gitignore,排除Vivado生成的文件
echo "*.jou" >> .gitignore
echo "*.log" >> .gitignore
echo "*.str" >> .gitignore
echo "vivado*" >> .gitignore

# 3. 添加源文件
git add src/spi_master.v
git add src/spi_slave.v
git add constraints/spi_timing.xdc

# 4. 检查状态
git status

# 5. 提交
git commit -m "SPI控制器初始版本,支持4种时钟模式"

# 6. 查看历史
git log --oneline

这个流程看起来简单,但我在项目中见过太多人跳步骤。比如不写.gitignore就提交,结果仓库里塞满了Vivado的临时文件。或者不检查git status就直接commit,把没调试完的代码也提交上去了。

📌 记住这个口诀: init建仓库,add选文件,commit写说明,status随时查,log回头看。这五条命令,就是Git的基石。

说白了,版本控制不是束缚你的枷锁,而是保护你的铠甲。刚开始用的时候可能会觉得麻烦,但等你习惯了,就会发现没有Git的日子简直没法干活。

公众号:蓝海资料掘金营,微信deep3321