📘 目录(点击可跳转)

使用流程

0. 从远程已有仓库开始(只需一次)

场景:GitHub 上已经有仓库了,本地还没有代码。

目标命令示例注释
1. 克隆远程仓库git clone <your-repo-url>如:git clone https://github.com/123awsd/smart_watch.git
2. 进入项目目录cd smart_watch进入刚克隆下来的项目文件夹。
3. 检查远程是否正常git remote -v确认 origin 显示正常即可。
1.初始化流程(仅需一次)
目标Windows (Git Bash) 命令注释
1. 终端进入项目cd /path/to/your/project (或右键 → \rightarrow Git Bash Here)确保终端路径正确。
2. 初始化仓库git init在当前目录创建 .git 文件夹。
3. 创建忽略文件touch .gitignore创建忽略文件。
4. 暂存 .gitignoregit add .gitignore仅暂存忽略文件。
5. 首次 Commitgit commit -m "chore: Init repository structure"使用 chore 类型。
6. 关联远程仓库git remote add origin <your-repo-url>绑定您的远程仓库 URL。
7. 推送主分支git push -u origin master首次使用 -u 建立跟踪关系。
2.标准功能开发流程
步骤Git Bash 命令关键原则与注释
1. 准备git checkout master \newline git pull origin master在切分支前,确保本地 master 分支与远程同步。
2. 创建功能分支git checkout -b feature/temperature-sensor口诀: 动手前,先分支。
3. 编码与提交git add src/sensors/temp.c \newline git commit -m "feat: 添加温度传感器驱动"在功能分支上进行多次原子化提交。
4. 合并功能git checkout master \newline git merge feature/temperature-sensor --no-ff -m "feat: 实现温度传感器功能 v1.1"--no-ff 关键:保留分支历史,专业且易回溯。
5. 清理分支git branch -d feature/temperature-sensor \newline git push origin master口诀: 合并即删除。
6. 版本标记 (Tag)git tag -a v1.1.0 -m "Release v1.1.0" \newline git push origin --tags重要: 标记稳定版本,并推送标签到远程。

规范

分支命名规范
前缀用途示例分支名
feature新功能开发feature/laser-power-system
fix一般 Bug 修复fix/oled-init-bug
hotfix紧急线上 Bughotfix/watch-crash-on-low-battery
refactor重构refactor/motor-control-module
chore项目维护、脚手架chore/update-build-scripts
experiment实验性质、不一定合并experiment/new-tracking-algorithm
prototype快速 PoC / Demoprototype/laser-gimbal-poc
提交信息规范
type说明典型场景(嵌入式)示例
feat新功能新增传感器、协议、控制算法、菜单页面feat: add temperature sensor driver
fix修 Bug修崩溃、逻辑错误、边界条件、初始化问题fix: prevent null ptr in adc init
refactor重构调整结构、拆分文件、提取公共函数,不改变对外行为refactor: extract i2c helper functions
docs文档README、接线图说明、注释增强docs: add setup guide for dev board
chore杂项维护工程配置、依赖更新、.gitignore、重命名文件等chore: update keil project settings
test测试自检程序、单元测试、硬件回归测试test: add imu calibration test script
perf性能优化提升刷新率、减少延迟、降低功耗perf: reduce i2c reads in main loop

.gitignore 内容

(嵌入式专用)

# Keil/IAR 等工程文件
*.uvprojx binary
*.uvoptx binary
*.uvguix* binary

# 目标文件 / 映像文件 (编译产物)
*.axf binary
*.elf binary
*.hex binary
*.map binary

# 二进制数据
*.bin binary

# 编译中间文件
*.o binary
*.d binary
*.bak
*.srec

# 常见的IDE配置文件和日志
*.log
.vscode/
.idea/

进阶操作

1. 查找提交历史(获取版本号)

使用图形化、简洁的方式查看提交历史,并记录您想要操作的提交的 哈希值(hash)(通常取前 7 位)。


git log --oneline --graph

📌 示例: 记录哈希值,如:a1b2c3d

2. 从某个历史版本创建新分支(最推荐的做法)

场景: 想基于旧版本重新开发,例如修复老 Bug 或进行实验性功能开发。

git checkout -b new-branch-name a1b2c3d
  • 示例:
    git checkout -b fix/old-bug a1b2c3d
    
3. 恢复某个文件到指定版本(安全,不影响其他文件)

场景: 某个文件被不小心改坏了,只想单独恢复它。

  1. 恢复文件:
    git checkout a1b2c3d -- path/to/file.c
    
  2. 暂存并提交:
    git add path/to/file.c
    git commit -m "fix: restore file.c from a1b2c3d"
    
4. 撤销某次提交(生成“反向提交”,安全可逆)

此操作会生成一个新的**“反向提交”来抵消原提交的更改。这是撤销已 push 到远程分支的提交的安全**方法。

git revert a1b2c3d
  • Git 会自动生成一条提交信息,类似:
    Revert "<原提交信息>"
    
5. 强制回退到某个版本(危险,需谨慎)

此操作会修改历史,不适用于多人协作项目。通常仅在本地分支出现无法挽救的混乱时使用。

  1. 本地强制回退:
    git reset --hard a1b2c3d
    
  2. 如果远程也要一起回退(非常危险):
    git push -f origin master
    

⚠️ 风险提示: git reset --hard + git push -f = 重写历史。请确保您了解后果,且仓库只有您自己使用,或团队已明确同意。

6. 查看某个版本的文件内容(只看不改)

场景: 想确认旧版本某个文件是如何编写的,不需要恢复文件。

git show a1b2c3d:path/to/file.c
7. 对比两个版本的差异
  • 对比两个指定的版本:
    git diff a1b2c3d b3c4d5e
    
  • 对比当前工作区与指定旧版本的差异:
    git diff a1b2c3d
       ```
    

问题解决

报错和解决

CRLF 报错
报错:

LF will be replaced by CRLF the next time Git touches it

原因:

你的项目中有很多文件是 LF 换行符(Linux 格式)
但你当前的 Git 配置或 .gitattributes 规定这些文件在 checkout 时要变成 CR(Windows 格式)。因此 Git 在 add 时会提示:下次 Git 处理这些文件时,LF 将被自动替换为 CRLF。
也就是说:

  • 文件内容不变
  • 只是换行符从 \n 变成了 \r\n
  • 非常常见,特别是 STM32 + Git 在 Windows 中开发
解决方法:

告诉 Git 不要自动转换换行符(最常用)
在项目根目录执行:
git config core.autocrlf false

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐