4、首次提交实战:git init、git add、git commit、git status、git log

好,咱们正式开始动手了。

前面几章讲了那么多理论,什么版本树啊、快照啊、暂存区啊。说实话,光听不练容易晕。我自己带新人时,最怕的就是对方背了一堆概念,结果一打开终端就懵了。

这一章,咱们就真刀真枪干一次。把EDA工程目录变成一个Git仓库,然后做第一次提交。

4.1 初始化仓库:git init

假设你有一个EDA工程文件夹,叫 pll_design。里面放着你的原理图、网表、仿真脚本这些。

打开终端,进到这个目录里。然后敲下第一行命令:

cd ~/projects/pll_design
git init

就这么简单。终端会回你一句:

Initialized empty Git repository in /home/you/projects/pll_design/.git/

嗯,Git在背后悄悄创建了一个 .git 隐藏文件夹。这个文件夹就是你的版本库。所有历史记录、分支信息、配置,全塞在里面。

注意: 千万别手贱去删 .git 文件夹。删了就等于把整个版本历史一把火烧了。我曾经有个同事,清理磁盘时顺手把 .git 删了,然后问我“为什么git log没反应了?”……嗯,那天的咖啡味道有点苦。

4.2 查看仓库状态:git status

初始化完了,咱们看看仓库现在啥情况。用 git status

git status

你会看到类似这样的输出:

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    pll_top.sch
    pll_top.cir
    run_simulation.sh
    ...

这里有几个关键信息:

  • On branch master:当前在master分支上。这是Git默认的主分支。
  • No commits yet:还没提交过任何东西。仓库是空的。
  • Untracked files:这些文件Git还没管它们。说白了,Git说“我看到这些文件了,但我不负责跟踪它们的变化”。

我个人习惯,每做一步操作前,先跑一遍 git status。就像开车前先看一眼仪表盘。心里有底。

4.3 把文件加入暂存区:git add

现在要让Git开始跟踪这些文件。用 git add 命令:

git add pll_top.sch pll_top.cir run_simulation.sh

你也可以用通配符,或者直接添加整个目录:

git add *.sch
# 或者
git add .
重要: git add . 会把当前目录下所有文件都加进去。但EDA工程里经常有中间文件、仿真波形、日志文件。这些你肯定不想提交。所以,我建议你一开始就养成好习惯——用 .gitignore 文件来排除它们。这个后面会专门讲。

再跑一次 git status,看看变化:

git status

输出变成:

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   pll_top.sch
    new file:   pll_top.cir
    new file:   run_simulation.sh

看到没?文件从“Untracked files”移到了“Changes to be committed”下面。这就叫“暂存”。文件现在躺在暂存区里,等着被正式记录。

为什么要分两步走?直接提交不行吗?

你想想看,有时候你改了一堆文件,但只想把其中一部分提交成一个版本,另一部分留到下次。暂存区就是给你做这个“挑选”用的。我在项目中经常这么干:改完一个bug,先把相关的几个文件 git add 进去,提交。然后再继续改下一个功能。

4.4 创建第一个提交:git commit

文件在暂存区里躺好了。现在正式把它们写进版本历史里:

git commit -m "第一次提交:PLL设计初始版本"

终端会回你:

[master (root-commit) a1b2c3d] 第一次提交:PLL设计初始版本
 3 files changed, 452 insertions(+)
 create mode 100644 pll_top.sch
 create mode 100644 pll_top.cir
 create mode 100644 run_simulation.sh

这里有几个点值得注意:

  • root-commit:这是仓库的第一个提交,也叫根提交。
  • a1b2c3d:这是这次提交的哈希值(SHA-1)。Git用这个来唯一标识这次提交。
  • 3 files changed, 452 insertions(+):3个文件被修改(其实是新增),总共插入了452行代码。
小技巧: 提交信息(-m后面的内容)一定要写清楚。别写“修改了一些东西”这种废话。我见过最离谱的提交信息是“asdf”。后来那个项目出了问题,回滚时根本不知道哪个版本是干嘛的。好的提交信息应该像这样:“修复了PLL锁定时间过长的问题,调整了环路滤波器参数”。

4.5 查看提交历史:git log

提交完了,怎么确认它真的被记录下来了?用 git log

git log

输出:

commit a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0 (HEAD -> master)
Author: Your Name <you@email.com>
Date:   Mon Mar 10 14:30:00 2025 +0800

    第一次提交:PLL设计初始版本

这就是你的第一个版本。以后每次提交,都会在 git log 里留下一条记录。你可以随时回到任何一个版本。

常用的 git log 选项:

选项 作用
--oneline 每个提交只显示一行,简洁
--graph 显示分支合并图,直观
-p 显示每次提交的具体改动内容
--since="2 weeks ago" 只显示最近两周的提交

举个例子,想看简洁版的历史:

git log --oneline

输出:

a1b2c3d (HEAD -> master) 第一次提交:PLL设计初始版本

嗯,清爽多了。

4.6 避坑指南:第一次提交容易犯的错

我刚开始用Git时,也踩过不少坑。这里列几个常见的:

  • 忘了配置用户名和邮箱:第一次 git commit 时,Git会报错说“please tell me who you are”。你得先设置:git config --global user.name "你的名字"git config --global user.email "你的邮箱"。不然提交记录里会显示“unknown”。
  • 提交了不该提交的文件:比如仿真生成的波形文件、日志文件。这些文件又大又没用。我曾经不小心把几百MB的仿真波形提交了,结果仓库变得巨臃肿。后来花了好大力气才清理掉。
  • 提交信息写得太随意:比如“fix”、“update”、“111”。三个月后你自己都看不懂。记住,提交信息是写给未来的自己看的。
警告: 第一次提交前,一定要确认 .gitignore 文件已经配置好了。否则一旦提交了大型二进制文件,后面想删掉会很麻烦。Git虽然能删,但历史记录里还会留着,仓库体积不会变小。

4.7 小结

这一章我们走完了完整的首次提交流程:

  1. git init:创建仓库
  2. git status:查看状态
  3. git add:把文件加入暂存区
  4. git commit:创建提交
  5. git log:查看历史

说白了,这五个命令就是Git最核心的操作。以后你90%的时间都在跟它们打交道。把这套流程练熟了,后面的分支、合并、回滚什么的,学起来就轻松多了。

下一章,咱们聊聊怎么用 .gitignore 来管好EDA工程里的那些乱七八糟的文件。嗯,这个在实战中特别重要。