老项目改造第一天:30分钟手敲Git核心命令训练
1. 为什么老项目改造第一天要死磕手敲Git接手一个五年以上的老项目代码仓库里躺着几十个分支、上百个标签提交记录从“fix bug”到“update”应有尽有这种场景下最危险的动作就是让AI帮你敲命令。我见过太多人改造老项目第一天就翻车不是代码写错了而是Git操作出了不可逆的事故——比如把别人的分支覆盖了或者把未提交的改动搞丢了。这个项目的核心思路很明确用30分钟集中训练把Git从“查文档才能用”变成“肌肉记忆级别的手敲能力”。为什么强调手敲因为AI补全和复制粘贴会让你跳过对命令参数的理解。当你手敲git rebase -i HEAD~3的时候大脑被迫处理-i是交互模式、HEAD~3是往前三个提交、rebase和merge的区别是什么。这种认知负荷恰恰是学习发生的地方。适合谁来参考三类人最需要第一类是刚接手老项目、对Git只停留在add/commit/push三件套的开发者第二类是长期依赖图形化工具、命令行一敲就慌的人第三类是想用AI辅助但又怕被AI带偏的谨慎派。30分钟不是让你成为Git专家而是让你在改造老项目的高压环境下手上有粮、心里不慌。我自己的经验是老项目改造第一周出的问题80%跟代码逻辑无关全是版本控制操作失误。所以这个训练不是“学Git”而是“建立安全操作边界”。2. 30分钟训练的整体设计与思路拆解2.1 为什么是30分钟而不是3小时时间盒设计是有讲究的。30分钟刚好覆盖Git日常操作的核心子集又不会长到让人产生“今天学不完就算了”的拖延心理。我试过用3小时系统讲Git结果学员第二天只记得git status。反而30分钟高强度手敲训练第二天手指还记得git log --oneline --graph。具体分配是这样的前5分钟建立心智模型中间20分钟手敲12个核心命令最后5分钟做一次完整的模拟事故恢复。每个命令必须手敲三遍以上不允许Tab补全不允许复制粘贴。听起来很笨但实测下来手敲三遍的记忆留存率比看十遍教程高得多。注意手敲训练期间建议关掉AI补全插件。不是AI不好而是训练阶段需要你主动回忆参数让AI代劳就失去了训练意义。2.2 核心命令的筛选逻辑Git命令有上百个但老项目改造日常用到的其实就十几个。我筛选的标准是高频、高危、高认知负荷。高频指每天都会用高危指敲错了后果严重高认知负荷指参数组合需要理解才能记住。最终选出的12个命令覆盖四个场景状态查看、提交管理、分支操作、事故恢复。状态查看类包括git status、git log、git diff提交管理类包括git add、git commit、git commit --amend分支操作类包括git branch、git checkout、git merge、git rebase事故恢复类包括git reset、git reflog。为什么把git reflog放进核心清单因为老项目改造过程中你大概率会误操作。reflog是唯一的后悔药它记录了HEAD的每一次移动。很多人不知道这个命令出了事就只能重新clone浪费大量时间。2.3 手敲代替AI和粘贴的底层原因这里涉及一个认知科学概念叫“生成效应”。自己生成的信息比被动接收的信息记忆更牢。当你手敲git rebase --onto main feature topic的时候你被迫理解--onto后面跟三个参数分别代表什么。而复制粘贴的话你只是完成了搬运动作大脑没有参与编码。另一个原因是老项目的特殊性。老项目的分支结构往往很混乱远程分支和本地分支的对应关系不清晰。AI补全基于通用模式它不知道你这个项目的分支命名规范是feature/xxx还是dev-xxx。手敲的时候你会注意到这些细节AI补全可能会给你一个语法正确但语义错误的命令。我踩过的一个坑有次用AI补全敲了一个git push --forceAI觉得这是常见操作就补全了但实际上那个分支是共享分支force push直接把同事的提交冲掉了。手敲的话敲到--force的时候我会犹豫一下这个犹豫就是安全阀。3. 12个核心命令的手敲实操与细节解析3.1 状态查看三件套status、log、diffgit status是使用频率最高的命令但很多人只用它看“哪些文件改了”。老项目改造时我建议加一个-sb参数组合git status -sb。-s是short格式-b显示分支信息。输出会变成两列第一列是暂存区状态第二列是工作区状态。这样你一眼就能看出哪些改动已经add了哪些还没有。手敲练习的时候刻意注意输出里的分支跟踪信息。比如## main...origin/main [ahead 2, behind 1]这告诉你本地main比远程多2个提交、少1个提交。老项目改造时经常遇到这种情况不理解这个信息就容易做出错误的push或pull决策。git log的常用参数组合是--oneline --graph --all --decorate。我习惯缩写成git log --oneline --graph --all。--graph用ASCII字符画出分支合并图--all显示所有分支而不只是当前分支。老项目的分支拓扑往往很复杂这个命令能帮你快速建立全局观。git diff分三种情况工作区和暂存区比较用git diff暂存区和最新提交比较用git diff --cached两个提交之间比较用git diff commit1 commit2。手敲的时候重点练--cached因为很多人搞不清git diff和git diff --cached的区别。简单记加了--cached就是看已经add但还没commit的内容。实操心得我习惯在git add之前先跑一遍git diff确认改动内容git add之后再跑一遍git diff --cached确认暂存内容。这两步花不了10秒钟但能避免90%的误提交。3.2 提交管理add、commit、amend的正确姿势git add有两个常用模式git add file添加指定文件git add -p交互式选择代码块。老项目改造时我强烈推荐-p模式因为它让你逐块审查改动。很多时候你改了一个文件里的三处逻辑但只想提交其中两处-p就能做到。git add -p的交互流程是Git把文件改动拆成若干hunk每个hunk问你Stage this hunk [y,n,q,a,d,s,e,?]?。常用的是y暂存、n跳过、s拆分更小的hunk、e手动编辑。手敲练习时至少完整走一遍-p流程感受一下hunk的拆分逻辑。git commit的规范写法是git commit -m type: subject。老项目改造时提交信息要写清楚因为以后可能要回溯。我习惯用fix:、refactor:、chore:这样的前缀。-m可以写多次第一次是标题后续是正文。比如git commit -m fix: 修复登录态过期问题 -m 原因是token刷新逻辑在并发场景下重复执行。git commit --amend是修改最后一次提交的利器。两个场景漏了文件用git add补上再--amend --no-edit提交信息写错了用--amend直接改。但注意如果提交已经push到远程amend后需要force push共享分支上要谨慎。手敲--amend的时候我建议先跑git log -1确认最后一次提交是什么再执行amend。这个习惯能防止你amend了错误的提交。3.3 分支操作branch、checkout、merge、rebasegit branch不带参数列出本地分支-a列出所有分支包括远程-d删除已合并分支-D强制删除未合并分支。老项目改造时经常需要清理过期分支我习惯先用git branch --merged main列出已经合并到main的分支确认后再批量删除。git checkout有两个用途切换分支和恢复文件。切换分支用git checkout branch恢复文件用git checkout -- file。注意--是必须的它告诉Git后面跟的是文件路径而不是分支名。手敲的时候刻意加上--养成习惯。git merge和git rebase的区别是老生常谈但手敲一遍感受完全不同。git merge feature会在当前分支产生一个合并提交历史呈分叉状。git rebase main会把当前分支的提交“搬”到main最新提交之后历史呈直线状。老项目改造时如果分支是个人分支且未共享用rebase保持历史整洁如果是共享分支用merge保留上下文。git rebase -i HEAD~3是交互式变基可以合并、修改、删除最近3个提交。手敲练习时重点感受pick、squash、reword三个指令。pick保留提交squash合并到上一个提交reword修改提交信息。这个命令在老项目改造中用来整理提交历史非常有用。注意rebase会重写提交历史已经push到远程的提交不要轻易rebase。如果必须rebase确保只有你一个人在用这个分支。3.4 事故恢复reset和refloggit reset有三种模式--soft只移动HEAD暂存区和工作区不变--mixed是默认模式移动HEAD并重置暂存区工作区不变--hard移动HEAD、重置暂存区、重置工作区。老项目改造时--hard要慎用因为它会丢弃工作区改动。手敲练习时我建议在测试仓库里故意制造一次误操作先git add一个文件然后git reset --hard感受一下暂存区和工作区同时被清空的效果。然后再用git reflog找回。这种“故意犯错再恢复”的练习比单纯看文档有效得多。git reflog显示HEAD的移动历史每一行是一个操作记录。找到误操作之前的那条记录用git reset --hard HEAD{n}恢复。n是reflog里的序号。这个命令是老项目改造的保命技能我建议每天开工前先跑一次git reflog | head -20心里有数。4. 老项目改造中的Git实战场景与避坑指南4.1 场景一接手一个分支混乱的仓库老项目最常见的情况是远程有几十个分支命名毫无规律有些分支已经合并但没删除有些分支是实验性的但被误当成正式分支。这时候第一步不是写代码而是理清分支关系。我的做法是先跑git fetch --all --prune把远程分支信息同步到本地同时清理已经删除的远程分支引用。然后跑git branch -a --sort-committerdate按最后提交时间排序列出所有分支。最近有提交的分支大概率是活跃分支半年没提交的基本可以忽略。接下来用git log --oneline --graph --all --simplify-by-decoration看分支拓扑。--simplify-by-decoration只显示有分支或标签指向的提交输出更简洁。通过这个图你能看出哪些分支是从main分出去的哪些分支之间有过合并。实操心得我习惯把活跃分支在本地建一个active/前缀的跟踪分支比如git checkout -b active/feature-x origin/feature-x。这样git branch输出时活跃分支排在一起不容易搞混。4.2 场景二提交历史里混入了不该提交的文件老项目改造时经常发现.env、node_modules、编译产物被提交到了仓库。这时候不能简单git rm因为历史提交里还有这些文件仓库体积不会减小。正确的做法是用git filter-branch或git filter-repo重写历史。但这两个命令都会重写提交哈希影响所有协作者。所以操作前必须通知团队约定一个时间点统一重新clone。如果只是最近一次提交混入了不该提交的文件用git rm --cached file从暂存区移除然后git commit --amend --no-edit。注意--cached表示只从Git索引移除不删除本地文件。如果文件已经提交了好几次我建议先用git log --oneline -- file找到所有涉及该文件的提交评估影响范围。如果提交不多且都在本地未push用git rebase -i逐个修改。如果已经push且涉及多人老老实实走filter-repo流程。4.3 场景三合并冲突反复出现老项目改造时如果你在一个长期分支上工作每次从main合并都会遇到相同的冲突。原因是main上的某些改动和你的分支改动冲突而你没有一次性解决。我的做法是第一次遇到冲突时不要只解决冲突就完事。先跑git diff --name-only --diff-filterU列出所有冲突文件然后逐个分析冲突原因。如果是格式冲突比如缩进、换行符统一格式规范如果是逻辑冲突和main的修改者沟通确定保留哪边。解决完冲突后用git rerere开启冲突自动记录。git rerere会记住你解决冲突的方式下次遇到相同冲突自动应用。开启方法git config --global rerere.enabled true。这个功能在老项目长期分支开发中能省大量时间。注意rerere自动应用冲突解决方案后仍然要人工确认一遍。自动解决不一定总是正确尤其是逻辑冲突。4.4 场景四误操作后的紧急恢复误操作分几种误删分支、误reset、误rebase、误push。每种都有对应的恢复方法。误删分支用git reflog找到分支最后一次提交的哈希然后git branch branch-name hash恢复。如果分支已经push到远程也可以从远程恢复git checkout -b branch-name origin/branch-name。误reset用git reflog找到reset之前的HEAD位置git reset --hard HEAD{n}恢复。注意--hard会丢弃当前工作区改动如果工作区有未保存的改动先用git stash存起来。误rebase用git reflog找到rebase之前的HEADgit reset --hard HEAD{n}恢复。rebase会在reflog里留下多条记录找到rebase (start)之前的那条。误push分两种情况如果push的是自己的分支且没有其他人基于该分支工作用git push --force-with-lease覆盖远程。--force-with-lease比--force安全它会在远程分支有你不知道的提交时拒绝push。如果push的是共享分支不要force push而是用git revert创建一个反向提交来撤销改动。5. 常见问题与排查技巧实录5.1 手敲训练中的典型卡点第一个卡点是记不住参数。我的建议是不要死记而是理解参数的含义。比如-p是patch的缩写-i是interactive的缩写--amend是修补的意思。理解缩写来源后记忆负担会小很多。第二个卡点是敲错了命令导致状态混乱。这时候不要慌先跑git status和git reflog确认当前状态。大部分误操作都可以通过reflog恢复。我建议在训练阶段故意敲错几次然后练习恢复流程。第三个卡点是不理解输出信息。比如git status里的Changes not staged for commit和Changes to be committed分别代表什么。我的经验是把git status的输出当成一个状态机工作区、暂存区、本地仓库三个区域之间的文件流转理解了状态机就理解了输出。5.2 老项目Git操作速查表场景命令注意事项查看简洁状态git status -sb第一列暂存区第二列工作区查看分支拓扑git log --oneline --graph --all加--simplify-by-decoration更简洁交互式暂存git add -p逐hunk审查避免误提交修改最后一次提交git commit --amend已push的提交amend后需force push清理已合并分支git branch -d branch先用--merged确认已合并恢复误删分支git branch name hashhash从git reflog获取撤销本地提交git reset --soft HEAD~1保留改动在暂存区撤销远程提交git revert hash创建反向提交安全查看操作历史git reflog每天开工前跑一次强制推送安全版git push --force-with-lease比--force安全5.3 独家避坑技巧技巧一给危险命令设置别名。比如git config --global alias.uncommit reset --soft HEAD~1这样git uncommit就是撤销最后一次提交但保留改动。别名降低了手敲长命令的出错概率。技巧二push之前先dry-run。git push --dry-run会模拟push过程但不实际推送能提前发现冲突或权限问题。老项目改造时我每次push前都跑一遍。技巧三用git stash临时保存工作区。切换分支前如果工作区有未提交改动git stash存起来切回来再git stash pop。注意stash pop可能产生冲突如果冲突了用git stash show -p查看内容再手动应用。技巧四定期跑git fsck --lost-found。这个命令能找到悬空对象dangling objects有时候误删的提交会以悬空对象形式存在。找到后用git show hash查看内容确认有用再恢复。技巧五老项目改造期间每天收工前跑一次git log --oneline --since1 day ago --author你的名字确认今天的提交都符合预期。这个习惯能及时发现提交信息写错、提交到错误分支等问题。5.4 关于AI辅助的边界手敲训练不是排斥AI而是建立判断力。训练完成后AI补全可以加速日常操作但涉及危险操作force push、reset --hard、rebase时我仍然建议手敲。因为手敲的过程给了你一个“暂停确认”的机会。我自己的做法是日常的add、commit、status用AI补全没问题push、merge、rebase手敲reset --hard、push --force不仅手敲还要先跑一遍git reflog确认恢复路径。这个边界不是一成不变的。随着你对项目分支结构和团队协作规范的熟悉可以逐步放宽。但老项目改造第一天严格一点没坏处。6. 训练后的日常维护与扩展建议30分钟训练结束后真正的考验是接下来一周的日常操作。我建议在改造期间保持一个Git操作日志每天记录用了哪些命令、遇到了什么问题、怎么解决的。一周后回看你会发现高频命令就那么几个而踩过的坑往往集中在特定场景。扩展方向有三个第一是学习git worktree老项目改造时经常需要同时看多个分支的代码worktree可以让你在一个仓库里检出多个工作目录不用反复切换分支。第二是学习git bisect当老项目出现回归bug时用二分查找定位引入bug的提交。第三是学习git hooks在commit前自动跑lint或测试防止把低级错误提交到仓库。我个人的体会是Git命令的手敲训练就像学骑自行车一开始需要刻意回忆每个动作熟练之后身体会自动反应。30分钟只是启动真正的熟练来自接下来每天的重复。老项目改造是个马拉松Git操作稳了后面写代码才没有后顾之忧。最后分享一个小技巧把常用的Git命令写成一个cheatsheet贴在显示器旁边但只写命令名不写参数。每次用的时候强迫自己回忆参数回忆不起来再查。这样坚持一周大部分参数就刻在脑子里了。

相关新闻

【办公提效利器】OpenClaw v2.7.9 Windows 端完整安装指南(包含安装包)

【办公提效利器】OpenClaw v2.7.9 Windows 端完整安装指南(包含安装包)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 8:39:33 阅读更多 →
前端复制限制破解指南:从 CSS 到脚本再到 OCR 的完整思路

前端复制限制破解指南:从 CSS 到脚本再到 OCR 的完整思路

前几天整理笔记又碰到一个让我很无语的场景:我在 zsxq 里买了某位博主的付费专栏,想把一段方法论摘到自己的笔记里,结果 CtrlC 没反应,右键菜单直接消失,文字也选不中。为了“解除复制限制”,我前前后后折腾…

2026/10/9 8:39:33 阅读更多 →
Spark实时模式vs Flink流处理:延迟对比与迁移实战

Spark实时模式vs Flink流处理:延迟对比与迁移实战

1. 先给结论:Spark 的"实时"到底是不是伪命题 前两年有个朋友问我:能不能把 Spark 的实时模式用起来,把 Flink 从"实时王座"上拉下来?当时社区里流行两种声音,一种说 Spark Structured Streaming …

2026/10/9 8:39:33 阅读更多 →

最新新闻

t3code 深度解析:Electron + CLI + Homebrew/winget 跨平台工具链实战

t3code 深度解析:Electron + CLI + Homebrew/winget 跨平台工具链实战

1. 从 t3code 这个标题说起:它到底想解决什么问题第一次看到 “t3code” 这个标题,我脑子里蹦出来的第一反应是:这大概率是一个围绕命令行工具链做整合的项目,而且名字里的 “t3” 很可能对应着某种技术栈缩写或者版本代号。结合热…

2026/10/9 9:52:12 阅读更多 →
可靠性工程师:从失效分析到全生命周期质量保障

可靠性工程师:从失效分析到全生命周期质量保障

1. 先把这个岗位说清楚说实话,十年前我刚入行的时候,别人问我是干嘛的,我说做可靠性,十个人有九个会反问:“那是啥?”现在好多了,起码大家知道这个岗位跟产品质量沾边,但理解依然很有…

2026/10/9 9:52:12 阅读更多 →
opencode 工具系统深度解析:从设计到实战集成

opencode 工具系统深度解析:从设计到实战集成

1. 从“工具”这个词说起:opencode 的定位到底特殊在哪聊 opencode 的工具系统之前,得先把一个容易混淆的概念掰扯清楚。很多人第一次接触 opencode,看到“工具”两个字,脑子里第一反应是插件市场里那种装完就多一个按钮的东西。但…

2026/10/9 9:52:12 阅读更多 →
私域团购区域招商实战:平台与供应链联合模式及团长运营指南

私域团购区域招商实战:平台与供应链联合模式及团长运营指南

1. 一场招商大会背后,私域团购正在发生什么变化私域团购这个词,这两年从朋友圈里的零星拼单,一路演变成了一个有着完整上下游的渠道体系。我关注这个领域大概有三年多,从最早的社群接龙、快团团工具,到后来各种区域平台…

2026/10/9 9:52:12 阅读更多 →
改进的多目标差分进化算法在电力系统环境经济调度中的应用(Python代码实现)【电气期刊论文复现】

改进的多目标差分进化算法在电力系统环境经济调度中的应用(Python代码实现)【电气期刊论文复现】

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

2026/10/9 9:52:12 阅读更多 →
MiFlashi专业刷机工具深度解析:fastboot兼容与小米OEM指令支持

MiFlashi专业刷机工具深度解析:fastboot兼容与小米OEM指令支持

1. 刷机不是“点一下就完事”:为什么小米用户需要真正专业的刷机工具“MiFlashi”这个名字一出现,老米粉心里基本就有数了——它不是那种点开就弹窗、点下一步就报错的“一键傻瓜式”工具。我接触过太多案例:某位A同学想给闲置的小米Note 3刷…

2026/10/9 9:51:10 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →