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行代码。
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 小结
这一章我们走完了完整的首次提交流程:
git init:创建仓库git status:查看状态git add:把文件加入暂存区git commit:创建提交git log:查看历史
说白了,这五个命令就是Git最核心的操作。以后你90%的时间都在跟它们打交道。把这套流程练熟了,后面的分支、合并、回滚什么的,学起来就轻松多了。
下一章,咱们聊聊怎么用 .gitignore 来管好EDA工程里的那些乱七八糟的文件。嗯,这个在实战中特别重要。