FPGA工程Git常用操作手册

FPGA工程Git常用操作手册

一、基础概念

1.1 核心区域划分

  • 工作区:你电脑里能看到的工程文件夹,直接修改代码的地方
  • 暂存区git add之后文件存入的临时区域,用于筛选本次要提交的内容
  • 本地仓库git commit之后代码存入的本地版本库,所有历史版本都保存在这里
  • 远端仓库:Gitee/GitHub 上的云端仓库,用于备份和多人协作

1.2 关键名词解释

  • HEAD:指针,永远指向你当前所在分支的最新一次本地提交,可理解为「当前版本定位标记」
  • master/main:主分支,用于存放验证通过的稳定版本
  • 功能分支:基于主分支创建的临时分支,用于新增功能调试,不影响主分支稳定代码

二、首次提交源码流程(从0到远端备份)

适用于仓库初始化后,第一次批量提交源码文件。

2.1 检查仓库状态

在工程任意子目录均可执行,查看当前文件状态:

gitstatus
  • 红色文件:未跟踪/未暂存的修改
  • 绿色文件:已进入暂存区,等待提交

2.2 添加指定文件到暂存区

仅添加当前目录下所有 .sv 源码文件
gitadd*.sv
递归添加工程所有子目录下的 .sv 文件
gitadd'*.sv'

注意:单引号不可省略,作用是让 Git 全局匹配所有层级子目录

2.3 撤回暂存区的文件

如果误添加了临时文件,将其撤出暂存区(不删除本地文件):

gitreset HEAD 文件名

2.4 提交到本地仓库

填写清晰的提交说明,完成本地版本存档:

gitcommit-m"提交说明:比如首次提交核心SV源码"

2.5 推送到远端仓库(首次推送)

第一次推送主分支需要绑定远端跟踪关系:

gitpush-uorigin master

绑定成功后,后续推送直接执行即可:

gitpush

三、功能调试分支工作流(推荐)

新增功能、修改逻辑调试时使用,完全不影响主分支稳定代码,改坏可一键复原。

3.1 新建功能分支并自动切换

基于当前主分支的稳定版本,创建调试分支:

gitcheckout-b分支名# 示例:git checkout -b feat_debug

3.2 查看所有分支

gitbranch
  • *标记的为当前所在分支

3.3 切换分支

# 切回稳定主分支gitcheckout master# 切回功能调试分支gitcheckout feat_debug

3.4 功能验证通过:合并到主分支

# 1. 先切回主分支gitcheckout master# 2. 将调试好的功能分支合并进来gitmerge feat_debug# 3. 同步推送到远端备份gitpush

3.5 功能验证失败:废弃调试分支

# 1. 切回主分支,代码自动恢复为稳定版本gitcheckout master# 2. 可选:删除废弃的调试分支gitbranch-Dfeat_debug

四、代码回退与复原方法

4.1 仅修改了文件,未执行 git add(工作区回退)

改完发现逻辑错误,直接恢复成上一次提交的原样:

gitrestore 文件名# 示例:git restore top.sv

4.2 已执行 git add,未 commit(暂存区回退)

# 1. 先从暂存区撤回gitreset HEAD 文件名# 2. 再恢复文件内容gitrestore 文件名

4.3 已执行 git commit,未 push(本地提交回退)

回退到上一个稳定版本,丢弃本次错误提交:

gitreset--hardHEAD^
  • HEAD^代表上一个提交版本,HEAD~3代表往前第3个版本
  • 也可通过git log --oneline查看提交哈希,指定回退到对应版本:
    gitreset--hard版本哈希值

五、常用查询命令

  1. 查看提交历史(精简显示)

    gitlog--oneline
  2. 查看当前分支

    gitbranch
  3. 查看远端仓库地址

    gitremote-v
  4. 一键跳转到仓库根目录

    cd$(gitrev-parse --show-toplevel)

六、注意事项与避坑指南

  1. 子目录执行:所有 git 命令在工程任意子目录都可执行,Git 会自动向上查找.git目录,作用范围为整个仓库,仅文件路径显示为相对路径。
  2. 通配符使用:不加引号的*.sv仅匹配当前目录;加单引号的'*.sv'由 Git 解析,递归匹配所有子目录。
  3. 临时文件.old后缀、temp_开头的调试文件建议不要提交,保持仓库仅存放有效源码。
  4. 仿真产物:建议在仓库根目录添加.gitignore文件,忽略.fsdb.log、编译中间目录等非源码文件,保持仓库干净。