团队协作必备:Git版本管理规范与提交约束实战指南
简介这份Git版本管理使用规范文档面向新入职开发人员及需要统一协作流程的技术团队用于解决多人开发中分支混乱、代码冲突频发、版本难以追溯等问题。文档围绕master主干、developer、feature、bugfix四类分支展开明确各自的命名规则与使用场景并给出代码提交、合并策略、代码审查、定期拉取及Tag管理等注意事项帮助团队建立从需求开发到提测上线的完整分支流转路径。资源包共1个docx文件约25KB内容涵盖编写目的、背景、术语定义、参考资料、修改历史以及分支规范说明与版本管理要点目录层级清晰便于按章节查阅。目前已有5991人学习下载适合刚接触团队协作的开发者快速理解分支规范也可供技术负责人作为制定内部Git流程的参考模板。1. 团队协作里最容易被忽视的基建git版本管理使用规范你有没有遇到过这种情况一个三人小团队代码仓库里分支名五花八门有人用dev有人用develop还有人直接往master上怼提交信息写的是“改了一下”“fix bug”“111”三个月后出了线上问题想回滚却找不到哪个提交引入了变更。这不是谁技术不行而是团队缺少一份能落地的 git版本管理使用规范。这份规范不是写给某一个人的是写给整个团队的协作契约——它规定了分支怎么建、提交信息怎么写、合并请求怎么走、冲突怎么处理。适合所有正在从“各自为战”往“协同开发”过渡的小团队也适合已经有一定规模但流程混乱、频繁翻车的中型团队。接下来我会把一份可执行的团队开发规范文档拆开讲清楚从分支模型到提交约束从代码审查到冲突处理每一步都给出能直接抄的配置和命令。2. 分支模型选型为什么主干开发加短分支比 Git Flow 更适合多数团队2.1 三种常见分支模型的适用边界在写规范之前先要确定分支模型。常见的有三种Git Flow、GitHub Flow 和主干开发配合短生命周期分支。Git Flow 把分支分成master、develop、feature、release、hotfix五类适合有明确版本发布周期、需要同时维护多个历史版本的项目。但它的缺点是分支切换频繁合并路径复杂小团队用起来很容易把自己绕晕。GitHub Flow 更简单只有main和feature两类分支所有变更通过 Pull Request 合入主干适合持续部署的 Web 项目。主干开发加短分支则介于两者之间所有人从主干拉出短分支完成后尽快合回主干分支存活时间通常不超过两天。我一般会推荐多数团队采用主干开发加短分支原因是它把复杂度降到了最低同时保留了代码审查和持续集成的能力。具体做法是main分支始终保持可发布状态任何新功能或修复都从main拉出feature/xxx或fix/xxx分支完成后通过合并请求合回main合并后立即删除该分支。这样既避免了长期分支带来的合并地狱又保证了每次合入都经过审查。2.2 分支命名规范与创建命令分支命名必须统一否则时间一长就没人记得tmp1和test2是干什么的。推荐格式是类型/简短描述类型包括feature、fix、hotfix、chore、docs。描述用英文小写加连字符不超过五个单词。例如# 从最新的 main 拉取新分支 git checkout main git pull origin main git checkout -b feature/user-login-validation # 修复线上紧急问题 git checkout main git pull origin main git checkout -b hotfix/payment-timeout逻辑说明先切到main并拉取最新代码确保分支起点是最新的。然后创建并切换到新分支。参数说明checkout -b表示创建并切换分支名中的feature/和hotfix/是前缀方便在仓库分支列表中按类型筛选。注意不要从旧分支拉新分支否则会把旧分支的未合并提交带进来造成合并范围扩大。2.3 分支保护规则与合并策略在代码托管平台上main分支必须设置保护规则禁止直接推送禁止强制推送要求合并请求至少一人审查通过要求持续集成检查通过。合并策略推荐使用 squash merge也就是把分支上的多个提交压缩成一个提交合入主干。这样做的好处是主干历史干净每个功能对应一个提交回滚时直接回滚该提交即可。缺点是丢失了分支内的细粒度提交记录但对于大多数团队来说主干可读性比分支内历史更重要。# 本地合并时使用 squash 的等效操作 git checkout main git pull origin main git merge --squash feature/user-login-validation git commit -m feat: 增加用户登录校验逻辑 git push origin main逻辑说明merge --squash会把分支上的所有变更暂存到工作区但不自动提交需要手动写一条提交信息。参数说明--squash表示压缩合并提交信息遵循下一章的提交规范。注意 squash 后原分支的提交历史不会进入主干原分支可以安全删除。3. 提交信息规范让 git log 变成可读的变更日志3.1 为什么需要约定式提交提交信息是团队协作中最频繁产生的“文档”但也是最容易被敷衍的。如果每个人都写“fix bug”那么git log就变成了黑匣子排查问题时只能靠猜。约定式提交Conventional Commits是目前最通用的方案格式是类型(范围): 描述。类型包括feat、fix、docs、style、refactor、test、chore。范围是可选的表示影响的模块。描述用中文或英文均可但团队内要统一。# 好的提交信息示例 git commit -m feat(auth): 增加手机号验证码登录 git commit -m fix(order): 修复订单金额计算精度丢失 git commit -m docs(readme): 补充本地启动步骤 # 坏的提交信息示例 git commit -m 改了一下 git commit -m fix bug git commit -m 111逻辑说明类型决定了这次提交的性质范围帮助快速定位模块描述说明具体做了什么。参数说明冒号后必须有一个空格描述不要以句号结尾。注意feat和fix会直接影响语义化版本号的自动生成如果团队使用自动发布工具这两个类型必须准确。3.2 用 commitlint 做提交信息强制校验光靠自觉不够需要在工具层面强制校验。commitlint 配合 husky 可以在提交时自动检查提交信息格式不符合规范直接拒绝提交。# 安装依赖 npm install --save-dev commitlint/cli commitlint/config-conventional husky # 初始化 husky npx husky install # 添加 commit-msg 钩子 npx husky add .husky/commit-msg npx --no -- commitlint --edit $1逻辑说明commitlint/cli是校验工具config-conventional是预设规则集husky 用来管理 git 钩子。commit-msg钩子会在每次提交时触发把提交信息文件路径传给 commitlint 校验。参数说明--edit $1中的$1是钩子脚本收到的第一个参数即提交信息文件路径。注意如果团队不用 Node.js 技术栈可以用 pre-commit 框架或原生 git 钩子脚本替代。// commitlint.config.js module.exports { extends: [commitlint/config-conventional], rules: { type-enum: [2, always, [ feat, fix, docs, style, refactor, test, chore ]], subject-max-length: [2, always, 72], subject-empty: [2, never] } };逻辑说明extends继承预设规则rules覆盖或补充自定义规则。type-enum限制允许的类型列表subject-max-length限制描述长度不超过 72 个字符subject-empty禁止空描述。参数说明数组第一个元素2表示错误级别第二个always表示必须满足。注意规则不要设得太严否则会逼着开发者用--no-verify绕过反而失去约束意义。3.3 提交粒度与原子性一个提交只做一件事这是原子性原则。不要把格式化代码和修复 bug 混在一个提交里也不要把三个不相关的功能塞进一个提交。这样做的好处是代码审查时更容易理解回滚时不会误伤。如果发现自己改多了可以用git add -p交互式暂存把变更拆成多个提交。# 交互式暂存按块选择要提交的内容 git add -p # 查看当前工作区和暂存区差异 git diff git diff --staged逻辑说明git add -p会逐块询问是否暂存适合把一个大变更拆成多个逻辑提交。git diff查看未暂存的变更git diff --staged查看已暂存的变更。参数说明-p是--patch的缩写。注意在拆分提交时要确保每个提交都能独立通过编译和测试否则会给后续二分排查带来麻烦。4. 代码审查与合并请求把问题拦在合入之前4.1 合并请求的模板与检查清单合并请求是代码审查的载体但很多团队的合并请求描述只有一行“请合并”。一个好的合并请求模板应该包含变更目的、变更内容、测试情况、影响范围、自查清单。可以在仓库根目录放一个.gitlab/merge_request_templates/default.md或.github/pull_request_template.md平台会自动加载。## 变更目的 !-- 这个合并请求解决了什么问题 -- ## 变更内容 !-- 列出主要改动点 -- ## 测试情况 - [ ] 本地单元测试通过 - [ ] 本地集成测试通过 - [ ] 已在测试环境验证 ## 影响范围 !-- 是否影响其他模块、是否需要数据库变更、是否需要配置更新 -- ## 自查清单 - [ ] 提交信息符合规范 - [ ] 无调试代码残留 - [ ] 无敏感信息硬编码逻辑说明模板把审查者需要的信息结构化减少来回追问。参数说明清单项用- [ ]表示未完成- [x]表示已完成。注意模板不要过长否则开发者会直接删掉不填保留最关键的几项即可。4.2 审查者的关注优先级审查代码时不要一上来就看变量命名和缩进。优先级应该是逻辑正确性 边界条件 安全性 性能 可读性 风格。逻辑正确性包括是否实现了需求、是否有明显的逻辑漏洞。边界条件包括空值、超长输入、并发场景。安全性包括 SQL 注入、XSS、权限校验。性能包括循环内查询、大对象拷贝。可读性和风格可以交给自动化工具处理。# 在本地查看分支与主干的差异方便审查 git fetch origin main git diff origin/main...feature/user-login-validation # 查看分支上的提交列表 git log origin/main..feature/user-login-validation --oneline逻辑说明git diff origin/main...feature/xxx中的三个点表示比较两个分支的最近共同祖先与目标分支的差异避免把主干上的新提交也算进来。git log origin/main..feature/xxx查看分支上独有的提交。参数说明--oneline让每个提交只显示一行。注意审查前先拉取最新主干否则差异可能不准确。4.3 合并前的自动化检查人工审查之外必须有一层自动化检查。常见的检查项包括代码风格检查、单元测试、构建打包、依赖漏洞扫描。这些检查应该在合并请求创建时自动触发不通过则禁止合并。以常见的持续集成配置为例# .gitlab-ci.yml 示例 stages: - lint - test - build lint: stage: lint script: - npm run lint test: stage: test script: - npm run test:unit build: stage: build script: - npm run build only: - main逻辑说明定义三个阶段lint 和 test 在每个合并请求上运行build 只在 main 分支运行。参数说明only: main限制 build 阶段只在主干触发避免浪费资源。注意自动化检查的时间不宜过长超过十分钟会严重影响开发体验可以考虑拆分并行任务。5. 避坑与排查git 协作中最容易翻车的五个场景5.1 合并冲突后误提交了冲突标记现象合并分支时出现冲突手动解决后忘记删除、、标记直接提交并推送导致代码无法运行。原因冲突解决后没有仔细检查文件内容或者使用了 IDE 的自动合并但未复核。解决合并后立即搜索冲突标记可以用grep -rn .快速定位。更稳妥的做法是在持续集成中加入冲突标记检查步骤发现标记直接失败。5.2 强制推送覆盖了别人的提交现象某人用git push --force推送后发现同事的提交不见了。原因强制推送会用本地历史覆盖远程历史如果本地历史不是最新的就会丢失远程提交。解决禁止在共享分支上使用--force如果确实需要使用--force-with-lease它会在远程有本地没有的提交时拒绝推送。团队规范中应明确写main分支禁止强制推送功能分支如需变基使用--force-with-lease。# 安全的强制推送方式 git push --force-with-lease origin feature/user-login-validation逻辑说明--force-with-lease会检查远程分支的当前提交是否与本地记录的远程跟踪分支一致如果不一致则拒绝推送。参数说明该参数比--force多一层保护但前提是本地执行过git fetch。注意即使使用--force-with-lease也不要在main上操作。5.3 提交了大文件或敏感信息现象不小心把密钥文件、数据库备份或大体积二进制文件提交到了仓库导致仓库体积暴涨或密钥泄露。原因提交前没有检查git status或者.gitignore配置不完整。解决如果刚提交还未推送可以用git reset --soft HEAD~1撤销提交删除文件后重新提交。如果已经推送需要用git filter-repo或 BFG 工具清理历史并立即轮换泄露的密钥。预防措施是配置好.gitignore和提交前检查。# 查看即将提交的文件列表 git status --short # 查看暂存区文件大小 git diff --staged --stat逻辑说明git status --short用简洁格式列出变更文件git diff --staged --stat显示暂存区文件的变更统计。参数说明--short输出两列状态码--stat显示增删行数。注意在提交前养成看一眼git status的习惯能避免大部分误提交。5.4 长期分支导致合并地狱现象一个功能分支开发了两周期间主干有大量新提交合并时冲突几十个文件解决冲突花了一整天还引入了新 bug。原因分支存活时间过长与主干的差异越来越大。解决分支存活时间控制在两天以内每天从主干拉取最新代码合并到功能分支尽早发现冲突。如果功能确实很大拆成多个小分支分阶段合入。# 在功能分支上定期同步主干 git checkout feature/user-login-validation git fetch origin main git merge origin/main # 或者使用变基保持历史线性 git rebase origin/main逻辑说明merge origin/main把主干最新变更合并到功能分支rebase origin/main把功能分支的提交移到主干最新提交之后。参数说明变基会让历史更线性但会改写提交哈希如果分支已经推送且有人基于它工作不要变基。注意无论用哪种方式同步后都要重新运行测试。5.5 误删分支或误回滚现象删除分支后发现还需要其中的代码或者回滚提交后发现回滚错了版本。原因操作前没有确认分支或提交的内容。解决git 提供了后悔药。删除分支后可以用git reflog找到分支最后的提交哈希然后重新创建分支。回滚错误可以用git revert反向操作或者用git reset回到正确位置。# 查看引用日志找到被删除分支的最后提交 git reflog # 从指定提交重新创建分支 git checkout -b feature/recovered-branch commit-hash # 反向提交一个错误的回滚 git revert revert-commit-hash逻辑说明git reflog记录了 HEAD 的移动历史包括分支切换、提交、重置等操作。git revert创建一个新提交来抵消指定提交的变更。参数说明commit-hash替换为实际哈希值。注意reflog默认保留 90 天过期后可能无法恢复所以重要操作前先确认。6. 把规范落到工具链三个能自动执行的检查技巧规范写进文档容易落到日常操作难。我的习惯是把能自动化的全部自动化减少对人的依赖。第一个技巧是用 pre-commit 钩子做提交前检查。除了前面提到的 commitlint还可以加代码格式化、静态检查、单元测试。这样开发者在提交时就能发现问题而不是等到合并请求被驳回。# 安装 pre-commit 框架 pip install pre-commit # 创建配置文件 .pre-commit-config.yaml cat .pre-commit-config.yaml EOF repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-merge-conflict - id: check-added-large-files args: [--maxkb500] EOF # 安装钩子 pre-commit install逻辑说明pre-commit是一个多语言钩子管理框架配置文件里列出要运行的检查项。trailing-whitespace删除行尾空格end-of-file-fixer确保文件以换行结尾check-merge-conflict检查冲突标记check-added-large-files阻止大文件提交。参数说明--maxkb500表示超过 500KB 的文件拒绝提交。注意rev字段指定钩子仓库的版本团队内要统一避免不同人跑出不同结果。第二个技巧是用持续集成做合并请求门禁。在合并请求上自动运行 lint、test、build任何一项失败就禁止合并。这样审查者只需要关注逻辑和设计不用手动跑测试。配置时注意把耗时的任务并行化把不常变的任务缓存起来。# .github/workflows/pr-check.yml 示例 name: PR Check on: pull_request: branches: [main] jobs: lint-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - uses: actions/setup-nodev4 with: node-version: 20 cache: npm - run: npm ci - run: npm run lint - run: npm run test:unit逻辑说明工作流在合并请求目标为main时触发检出代码后设置 Node.js 环境并缓存 npm 依赖然后依次运行安装、检查和测试。参数说明cache: npm启用依赖缓存加快后续运行速度。注意npm ci比npm install更适合持续集成因为它严格按照锁文件安装保证环境一致。第三个技巧是用 git 别名简化高频操作。团队可以把常用命令写成别名减少敲错命令的概率。比如# 配置 git 别名 git config --global alias.st status --short git config --global alias.co checkout git config --global alias.br branch git config --global alias.lg log --oneline --graph --decorate git config --global alias.sync !git fetch origin main git merge origin/main逻辑说明alias.st把git st映射为git status --shortalias.lg用图形化方式展示提交历史alias.sync拉取主干并合并到当前分支。参数说明!开头表示执行 shell 命令而不是 git 子命令。注意别名是本地配置团队可以共享一份别名列表但不要强制覆盖个人已有配置。最后说一个我自己的教训。早期带团队时我把规范写得很细但没做自动化结果三个月后大家又回到了随手提交的状态。后来我把 commitlint、pre-commit、持续集成全部配好规范才真正落地。规范不是靠自觉是靠工具链兜底。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

OFDM链路级仿真MATLAB实战:从帧结构到BER曲线

OFDM链路级仿真MATLAB实战:从帧结构到BER曲线

简介:这份MATLAB OFDM链路级仿真程序面向无线通信初学者与工程研究人员,用于在MATLAB环境中搭建并验证完整的OFDM收发链路。资源以m脚本为主体,共12个文件,压缩包约7KB,涵盖主流程入口、OFDM调制解调、加窗与重叠处理、…

2026/10/12 11:05:18 阅读更多 →
技术参考资源整理指南:分类筛选与高效使用方法

技术参考资源整理指南:分类筛选与高效使用方法

1. 为什么“参考资源”这一章最容易被跳过,却最不该被跳过做技术内容这些年,我见过太多人翻书、翻文档、翻教程时,看到“参考资源”四个字就直接翻页。理由也很统一:不就是一堆链接和书名吗,能有什么营养?说…

2026/10/12 11:05:17 阅读更多 →
深度拆解Attention机制:QKV、缩放点积与多头注意力实现

深度拆解Attention机制:QKV、缩放点积与多头注意力实现

Attention机制这几年几乎成了AI算法领域的基础设施。做自然语言处理的人在研究它,做计算机视觉的人在改造它,做推荐系统的人在引入它,做多模态的人在靠它对齐不同模态的信息。很多第一次接触Transformer的朋友,几乎都会被Q、K、V这…

2026/10/12 11:05:17 阅读更多 →

最新新闻

机器学习最小可行知识链:从公式到可调试代码的完整实践

机器学习最小可行知识链:从公式到可调试代码的完整实践

简介:本资源是邹博主讲的《机器学习全方位解析:从基础到实践》配套教学包,面向零基础入门者与希望系统夯实理论与工程能力的学习者,解决机器学习概念抽象、代码实践脱节、算法调优无从下手等核心痛点。压缩包共613个文件&#xff…

2026/10/12 13:00:09 阅读更多 →
Harbor v2.13.1 ARM64离线部署实战:内网镜像仓库搭建与避坑指南

Harbor v2.13.1 ARM64离线部署实战:内网镜像仓库搭建与避坑指南

简介:本资源为 Harbor 最新 v2.13.1 的 ARM64 架构离线安装包,面向在 ARM64 服务器或 Kubernetes 集群上部署私有镜像仓库的运维与开发人员,解决国产化平台、信创环境及边缘节点无法直接拉取官方 x86 安装包的问题。压缩包共 6 个文件&#x…

2026/10/12 13:00:09 阅读更多 →
物联网平台二次开发选型指南:架构边界、扩展点与实战避坑

物联网平台二次开发选型指南:架构边界、扩展点与实战避坑

1. 为什么“适合二开”才是物联网平台选型的硬指标做物联网平台选型这件事,我踩过不少坑。早年做某智慧园区项目,技术评审时大家盯着功能清单看——设备接入、规则引擎、数据大屏、告警中心,列表很丰满,厂商演示也很流畅。结果签完…

2026/10/12 13:00:09 阅读更多 →
批处理驱动Matlab实现参数自动扫描:原理、传参与排错指南

批处理驱动Matlab实现参数自动扫描:原理、传参与排错指南

说实话,用批处理去反复跑Matlab这事儿,我最早是在一次大规模参数寻优中被逼出来的。那时候手里有一堆实验数据要拟合,模型参数有四五种组合方式,每组参数跑一遍得几十秒,加起来几百个组合,手动改一个跑一个…

2026/10/12 13:00:08 阅读更多 →
PyTorch新手必学:ResNet18从原理到手写实现详解

PyTorch新手必学:ResNet18从原理到手写实现详解

1. 项目概述:为什么ResNet18是PyTorch新手绕不开的“第一座桥”如果你刚打开Jupyter Notebook,敲下import torch,接着想跑一个真正能分类图像的模型——不是MNIST手写数字那种玩具级任务,而是能在CIFAR-10上稳定达到92%准确率、结…

2026/10/12 13:00:08 阅读更多 →
LCA最近公共祖先算法详解:倍增法、Tarjan与树链剖分

LCA最近公共祖先算法详解:倍增法、Tarjan与树链剖分

1. 从一道面试题说起:为什么LCA值得花时间搞透第一次接触LCA是在刷题的时候,题目很直白:给一棵树,多次询问两个节点的最近公共祖先。当时我的第一反应是暴力——两个节点分别往上走,标记走过的路径,第一个相…

2026/10/12 12:59:08 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →