发布时间:2026/8/16 22:12:49
Git版本管理:从零开始,用学生项目讲透每个命令 学校不教Git但实习面试天天问你用过Git吗。网上的Git教程要么讲一堆原理要么假设你在公司团队里工作——可我还是学生没参加过工作那些场景我根本没概念。这篇就用你真正会遇到的项目场景课程设计、个人STM32项目、毕设一步步讲每个命令到底什么时候敲、为什么敲。一、先搞懂Git到底解决什么问题1.1 你一定遇到过这个场景你在做STM32课程设计代码改来改去温度采集.c 温度采集_改.c 温度采集_改2.c 温度采集_最终版.c 温度采集_最终版2.c 温度采集_最终版_真的最终.c 温度采集_打死不改了.c 温度采集_改了之后不工作了_还原.c问题哪个版本是最新的记不清了最终版2改了什么不知道了“改了之后不工作了”——到底改了哪行导致坏的找不出来想回到最终版那个能用的版本但已经覆盖了1.2 Git就是来解决这个的Git 给你的代码拍快照 随时回到任何一个快照快照1: 初始版本能编译 快照2: 加了SHT30驱动能读温度 快照3: 加了OLED显示能显示了 快照4: 改了显示格式 ← 现在在这里如果快照4改坏了一条命令回到快照3。每个快照都能写备注这版改了什么。这就是Git。1.3 面试为什么问Git因为公司里所有代码都用Git管理。你不会Git 进公司第一天连代码都拉不下来。面试官问Git不是考你背命令是确认你进公司能直接干活。二、安装和配置第一次用必看2.1 安装Windows去 https://git-scm.com 下载安装包一路下一步就行。安装完成后右键菜单会多出Git Bash Here。验证安装成功打开Git Bash或cmd输入git--version# 输出类似git version 2.43.0 就说明装好了2.2 第一次使用必须配置装好后告诉Git你是谁每次提交代码会附上你的名字gitconfig--globaluser.name嵌入式阿蔡gitconfig--globaluser.email2680631492qq.com这里的名字和邮箱随便填但建议用真名常用邮箱因为简历上的GitHub链接打开后面试官能看到你的提交记录。验证配置gitconfig--list# 能看到 user.name嵌入式阿蔡 和 user.email... 就对了三、用真实项目手把手走一遍场景你要做一个STM32温湿度检测器个人项目第1步创建项目文件夹# 在电脑上建个项目文件夹mkdirtemp_monitorcdtemp_monitor第2步初始化Git仓库gitinit# 输出Initialized empty Git repository in D:/temp_monitor/.git/这一步做了什么在你的文件夹里创建了一个隐藏的.git文件夹Git就是靠它来记录所有版本的。这个文件夹别删删了所有版本记录都没了。第3步创建.gitignore文件重点什么是.gitignore它是一个文本文件里面写哪些文件不要被Git管理。为什么需要它用Keil开发STM32编译一次会生成一堆文件temp_monitor/ ├── main.c ← 源代码要管理 ├── sht30.c ← 源代码要管理 ├── sht30.h ← 源代码要管理 ├── temp_monitor.uvprojx ← Keil工程文件要管理 ├── main.o ← 编译产物不需要 ├── sht30.o ← 编译产物不需要 ├── main.crf ← 编译产物不需要 ├── temp_monitor.axf ← 编译产物不需要 ├── temp_monitor.hex ← 编译产物不需要 ├── temp_monitor.map ← 编译产物不需要 └── DebugConfig/ ← 编译配置缓存不需要如果把这些编译产物也提交到Git仓库会越来越大几十MB的垃圾文件而且毫无意义——别人下载你的代码重新编译就会生成。怎么创建.gitignore方法1用VSCode/记事本创建推荐新手在项目文件夹temp_monitor根目录下新建一个文件文件名就叫.gitignore注意文件名前面有个点没有后缀。Windows可能提示必须输入文件名这时候文件名输入.gitignore.末尾加个点Windows就会自动改成.gitignore。方法2用命令创建touch.gitignore# Windows的Git Bash支持这个命令# 或者用记事本直接另存为.gitignore里写什么打开.gitignore文件把以下内容粘进去# Keil编译产物 *.o *.d *.crf *.iex *.axf *.hex *.bin *.map *.lst *.htm *.dep *.bak # Keil工程临时文件 *.uvguix.* *.uvgui.* *.scvd *.dbconf DebugConfig/ Listings/ Objects/ RTE/ # J-Link/ST-Link临时文件 JLinkLog.txt *.jdebug # VSCode配置 .vscode/ *.code-workspace # 系统文件 .DS_Store Thumbs.db desktop.ini这些规则是什么意思*.o→ 所有以.o结尾的文件都忽略星号是通配符代表任意文件名*.hex→ 所有.hex文件忽略DebugConfig/→ 这个文件夹整个忽略.vscode/→ VSCode的配置文件夹忽略怎么验证.gitignore生效了gitstatus如果你看到Untracked files: .gitignore main.c sht30.c sht30.h temp_monitor.uvprojx只列出了源代码和工程文件没有.o、.hex这些编译产物说明.gitignore生效了如果你看到.o文件还在列表里可能是你在创建.gitignore之前就已经git add了那些文件。解决办法# 从Git跟踪中移除文件还在电脑上只是Git不管了gitrm--cachedmain.ogitrm--cached*.o重要顺序先创建.gitignore→ 再git add。如果先add了编译产物再加.gitignore已经跟踪的文件不会被自动忽略。第4步第一次提交代码# 把所有文件加入暂存区准备提交的意思gitadd.# 提交-m后面是这次提交的说明gitcommit-m初始化项目STM32温湿度检测器包含SHT30驱动这两个命令是什么意思git add .→ 告诉Git这些文件我改好了准备记录一个快照这个阶段叫暂存区git commit -m 说明→ 正式拍快照存入版本历史为什么分两步这样你可以选择性地提交只提交sht30.c的改动不提交还没写完的main.c。gitaddsht30.c# 只暂存sht30.cgitcommit-m完成SHT30驱动第5步继续开发再次提交你继续写代码加上了OLED显示功能。写完后gitstatus# 看看改了哪些文件# 显示modified: main.c红色表示改了但没暂存gitadd.# 暂存所有改动gitcommit-m添加OLED显示温度湿度实时显示第6步查看历史版本gitlog--oneline# 输出# a3b2c1d 添加OLED显示温度湿度实时显示# 7e8f9a0 初始化项目STM32温湿度检测器包含SHT30驱动每一行前面的a3b2c1d是版本号commit ID想回到哪个版本就用这个号。四、远程仓库把代码传到GitHub/Gitee4.1 为什么要传到网上备份电脑坏了代码还在简历背书GitHub链接放简历上面试官能看你的代码多设备同步宿舍电脑和图书馆电脑都能拉代码4.2 注册并创建仓库去 https://github.com 或 https://gitee.com 注册账号点New Repository新建仓库仓库名填temp_monitor选Private私有或Public公开点创建创建后会给你一个地址类似https://github.com/你的用户名/temp_monitor.git4.3 把本地代码推上去# 关联远程仓库只需做一次gitremoteaddorigin https://github.com/你的用户名/temp_monitor.git# 第一次推送gitpush-uorigin main如果提示输入账号密码GitHub现在要用药TokenPersonal Access Token代替密码。去GitHub Settings → Developer settings → Personal access tokens 生成一个复制下来当密码用。Gitee直接用密码就行。之后每次改完代码提交后只要gitpush就推上去了。4.4 换台电脑继续开发在图书馆电脑上# 把仓库克隆下来gitclone https://github.com/你的用户名/temp_monitor.gitcdtemp_monitor# 改代码...gitadd.gitcommit-m在图书馆修改了显示格式gitpush# 推到网上回宿舍后cdtemp_monitorgitpull# 把网上的最新版本拉下来# 现在本地就是最新代码了五、分支Git最强大的功能5.1 什么是分支用大白话讲分支 平行宇宙。你在写温湿度检测器显示功能正常工作了。现在你想加一个数据存W25Q64 Flash的功能但不确定能不能写好怕改坏了现在能用的版本。不用分支的做法直接改main.c改坏了就完蛋回不去了或者手动备份文件夹。用分支的做法main分支稳定版─── 显示功能完成 ● │ │ 开个新分支去试Flash功能 ▼ feature分支 ────────── 写Flash代码中... │ │ 写好了合并回main ▼ main分支 ───────────── 显示Flash都完成 ●在feature分支上随便折腾main分支的代码完全不受影响。写好了再合并回去写不好直接删掉分支main还是原来那样。5.2 分支实操# 看看现在在哪个分支gitbranch# * main ← 星号表示当前分支# 创建一个新分支并切换过去gitcheckout-bfeature/w25q64# 现在你在feature/w25q64分支了# 在这个分支上写代码...# 假设你写好了Flash读写函数gitadd.gitcommit-m实现W25Q64 Flash读写驱动# 切回main分支代码会变回main的状态Flash代码暂时消失gitcheckout main# 把feature分支的代码合并到maingitmerge feature/w25q64# 合并完了删掉这个分支不需要了gitbranch-dfeature/w25q645.3 什么时候用分支场景分支名建议试一个不确定的新功能feature/xxx修一个bugfix/xxx毕设要改大版本dev或v2个人项目也要用分支别直接在main上改养成习惯进公司无缝衔接。六、救命操作改坏了怎么回退6.1 场景改了代码还没add还在工作区你改了main.c发现改错了想回到改之前gitcheckout -- main.c# main.c 恢复到上一次commit的状态--的意思是撤销工作区的修改。这个命令只能撤销还没git add的改动。6.2 场景已经add了但还没commitgitreset HEAD main.c# 从暂存区撤出来文件改动还在gitcheckout -- main.c# 再撤销改动6.3 场景已经commit了想撤销这次提交# 撤销最近1次提交但保留代码改动软回退gitreset--softHEAD~1# 撤销最近1次提交代码也回到改之前硬回退谨慎用gitreset--hardHEAD~1HEAD~1 “上一个版本”。HEAD~2 上上个版本。--soft保留代码改动相当于只撤销commit--hard连代码一起删真的回去了。6.4 场景想回到3个版本之前看看代码# 不影响当前分支只是穿越回去看看gitcheckout a3b2c1d# 填commit ID的前7位# 看完了回到最新版本gitcheckout main七、团队协作场景进阶面试会问7.1 公司里的Git工作流进公司后团队一般这样用Gitmain生产环境版本不能直接改 └── develop开发分支所有人合并到这里 ├── feature/sensor-driver你负责的传感器驱动 ├── feature/lvgl-ui同事A负责的界面 └── fix/uart-bug同事B在修bug每个人在自己分支上开发开发完合并到develop测试通过后再合并到main发布。7.2 你进公司第一天的流程# 1. 克隆团队仓库gitclone https://github.com/company/project.git# 2. 切换到develop分支gitcheckout develop# 3. 拉取最新代码gitpull# 4. 创建你自己的功能分支gitcheckout-bfeature/my-module# 5. 写代码提交gitadd.gitcommit-mfeat: 实现XX模块# 6. 推送到远程gitpush origin feature/my-module# 7. 在GitHub/GitLab上发起Pull RequestPR让同事review7.3 解决冲突你和同事同时改了main.c你先合并了同事再合并时冲突了gitpull# Auto-merging main.c# CONFLICT (content): Merge conflict in main.c打开main.c会看到HEAD// 你的代码uint8_ttempsht30_read_temp();// 同事的代码floattempget_temperature();feature/colleague HEAD到是你的代码到是同事的代码。你决定保留哪个或合并删掉这些标记符号然后gitaddmain.cgitcommit-m合并main.c解决冲突gitpush八、版本标签给正式版本打标记场景毕设答辩要交最终版# 在当前版本打个标签gittag v1.0.0-m毕设答辩版本温湿度检测器完整版# 推送标签到远程gitpush origin v1.0.0以后想找答辩那天的版本gitcheckout v1.0.0建议每次里程碑都打标签v0.1原型版、v0.5功能完成、v1.0答辩版、v1.1修改版。九、常见踩坑新手必看坑1.gitignore不生效原因先git add了文件后创建的.gitignore。已经跟踪的文件不会被忽略。解决# 从Git跟踪中移除文件还在电脑上gitrm-r--cached.# 重新addgitadd.gitcommit-m更新.gitignore坑2commit message写改了点东西3个月后看git log全是改了点东西、“又改了”、“修复bug”完全不知道每版改了什么。规范写法类型: 具体描述feat: 添加SHT30温湿度驱动 ← feat新功能 fix: 修复UART接收丢字节问题 ← fix修bug docs: 更新README使用说明 ← docs文档 refactor: 重构ADC滤波算法 ← refactor重构坑3编译产物提交了仓库几百MBgit log --oneline # 发现早期commit把.axf .hex都提交了预防项目一开始就建好.gitignore。补救用git rm --cached逐个移除或用 BFG Repo-Cleaner 工具清理历史。坑4在main分支直接改改坏了main分支应该永远是能用的版本。直接在上面改改坏了没法回退到稳定版。正确做法开分支改测好了再合并。坑5git push报错rejectedgitpush# ! [rejected] main - main (fetch first)原因远程有别人推的新提交你本地没有。解决先拉再推gitpull# 先拉取gitpush# 再推送十、速查表日常使用频率最高的5个命令命令什么时候用git status随时看当前状态git add .改完代码准备提交git commit -m 说明记录一个版本git push推到远程仓库git log --oneline查看历史版本完整场景速查我想要…命令开始一个新项目git init→ 建.gitignore→git add .→git commit改了代码想保存版本git add .→git commit -m 说明推到GitHubgit push从GitHub拉最新代码git pull回到上一个版本git reset --hard HEAD~1开新功能不影响主代码git checkout -b feature/xxx合并分支git checkout main→git merge feature/xxx改错了还没addgit checkout -- 文件名打版本标签git tag v1.0.0 -m 说明克隆别人的项目git clone 仓库地址十一、实战练习从零跑一遍打开电脑跟着敲一遍10分钟搞定# 1. 建项目mkdirmy_first_gitcdmy_first_git# 2. 初始化gitinit# 3. 建个.gitignoreecho*.o.gitignoreecho*.hex.gitignore# 4. 写个代码文件echo#include stdio.hmain.cechoint main() { printf(\hello git\); return 0; }main.c# 5. 第一次提交gitadd.gitcommit-mfeat: 初始化项目# 6. 改一下代码echo// 第二次修改main.c# 7. 看看改了什么gitdiff# 8. 提交第二次gitadd.gitcommit-mdocs: 添加注释# 9. 看历史gitlog--oneline# 10. 试着回退到第一个版本gitreset--hardHEAD~1gitlog--oneline# 只剩一条了# 11. 后悔了还能回去reflog找记录gitreflog# 找到刚才的commit IDgit reset --hard 那个ID跑完这11步你已经掌握Git 80%的日常用法了。剩下的就是多用、多踩坑。十二、写在最后Git不是学出来的是用出来的。建议你今天就把现有的STM32项目传到GitHub——简历上多个GitHub链接每次写代码前先git pull写完后git add → commit → push——养成习惯试着用分支开发新功能——体验一下改坏了也不怕的安全感等你习惯了Git你会发现再也不想回到最终版_打死不改_真的最终版.c的日子了。面试官问你用过Git吗你能回答“我的STM32项目都托管在GitHub上日常用分支开发新功能commit message遵循feat/fix/docs规范”——这就比90%的同学强了。相关文章推荐Keil vs VSCode vs STM32CubeIDE嵌入式IDE对比如何阅读Datasheet嵌入式工程师的核心技能作者嵌入式阿蔡 | 一枚准大四的嵌入式菜鸟正在打牢基础记录成长

相关新闻

2026/8/16 22:07:48

银河麒麟V10服务器安装与初始化实战指南:从分区到Docker部署

1. 项目概述:为什么需要一份详尽的银河麒麟V10安装手册? 如果你是一名系统管理员、运维工程师,或者正在为国产化项目进行技术选型,那么“银河麒麟高级服务器操作系统 V10”这个名字你一定不陌生。作为一款在关键领域广泛部署的国产…

2026/8/16 22:07:48

Windows本地部署OpenClaw:手把手搭建AI智能体框架

1. 项目概述:为什么要在Windows上部署OpenClaw? 如果你最近在关注AI智能体领域,大概率已经听过OpenClaw这个名字。它不是一个独立的大模型,而是一个功能强大的“智能体框架”,你可以把它理解为一个AI的“大脑操作系统”…

2026/8/17 2:43:04

python列表学习笔记

目录简述添加元素删除元素排序反转列表推导式遍历简述 是一个容器 是一个可变的集合,是一个元素有序、可重复的序列 添加元素 append在末尾添加新元素 lst [1,2,3] lst.append(4)insert 在指定索引处添加数据 lst [1,2,3] lst.insert(0,0)删除元素…

2026/8/17 2:43:04

Python面向对象编程:从封装、继承到多态的实战进阶指南

1. 项目概述:为什么面向对象是Python进阶的必经之路如果你已经能熟练地用Python写一些脚本,处理数据,或者用几个循环和判断语句完成一些小任务,那么恭喜你,你已经迈出了第一步。但很快你会发现,当项目稍微复…

2026/8/17 2:43:04

Python环境配置全攻略:从安装到虚拟环境与IDE设置

1. 为什么你的Python安装总是不顺?从源头说起 每次看到“Python安装教程”这几个字,你是不是觉得这有什么好讲的,不就是点下一步吗?但现实是,我见过太多新手,甚至是工作了一两年的朋友,因为最初…

2026/8/17 2:43:04

H3C S5024PV6-EI二层核心交换机实战配置与部署指南

最近在帮朋友公司做网络升级方案时,发现很多中小企业在选择核心交换机时非常纠结。预算有限,但又需要稳定、功能全、能支撑未来几年发展的设备。反复对比了几款主流品牌后,华三通信(H3C)的S5024PV6-EI这款全千兆二层网…

2026/8/16 0:00:35

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:36

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/17 0:02:57

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述:为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序,尤其是涉及到界面响应、多任务并行或者硬件IO等待,大概率会遇到一个头疼的问题:程序“卡”住了。前面板点不动,进度条不更新…

2026/8/17 0:02:57

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述:为什么要在局域网内用飞书传文件? 飞书作为一款主流的协同办公套件,其核心功能是围绕云端协作设计的。无论是文档、表格还是文件,通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/15 9:46:39

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/16 16:53:03

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/15 9:46:30

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…