Git apply 补丁验收:--check 只预检,--cached 只修改暂存区 拿到一份补丁后,直接应用到正在工作的目录,会让原有修改与外来修改混在一起。更可靠的第一步是看补丁将改哪些文件,再用与最终应用模式一致的选项预检。检查通过只说明当前内容能匹配,并不意味着补丁已经生效。git apply... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git pathspec 精确选文件:加了引号和双横线,路径仍可能被当成模式 仓库里同时有 report[1].txt 和 report1.txt,给文件名加上引号再交给 Git,结果仍可能选中后者。原因是命令经历了两层解释:shell 先处理参数,Git 再按 pathspec 规则选择路径... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git stash 保存临时工作:未跟踪文件、apply 与 pop 各自留下什么 临时切走处理另一个问题前,执行 stash 后发现新建文件还在原地,通常不是保存失败。默认范围主要是已跟踪文件的修改,新建的未跟踪文件需要明确选择是否纳入。保存之前先看状态,才能知道工作现场究竟包含哪些部分。恢复动作... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git bundle 离线迁移:完整包可以克隆,增量包还要核对前置提交 没有可用远程服务器时,要把一段仓库历史交给另一台机器,复制工作目录只能带走当前文件,无法自然保留提交关系。Git bundle 可以把对象与选定引用放进单个文件,再通过克隆或获取导入。它尤其适合离线搬运已经提交的历史... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
JavaScript 生成器提前退出:for...of 的 break 怎样触发 finally 清理 生成器适合逐条产生数据,但“调用方不再读取”和“生成器已经清理”并不是同一件事。读取第一条后就离开页面,如果调用方式只是不再执行 next,函数可能仍停在 yield 处。资源清理什么时候发生,需要看迭代是怎样结束的... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
EventTarget 监听清理:函数长得一样,也不代表能移除同一个订阅 一个面板打开三次后,同一条更新消息触发三次处理,常见原因是每次挂载都注册了新监听,卸载时却没有移除原来的函数。写两遍内容相同的箭头函数,并不会得到同一个函数对象。订阅关系认的是实际回调身份,而不是源码文字。Event... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Intl.NumberFormat 数字展示:舍入只改变文字,分组与单位要按部件读取 设备读数需要在页面显示为两位小数,开发者常把格式化后的字符串又写回数据对象。短期看起来很整齐,后续排序、求平均或重新切换语言时却开始出错。数字的原始值、展示精度和地区格式应分别保存,展示文本只是最后一步的产物。Int... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
JavaScript 有界并发任务池:把任务延后启动,才能真正限制同时运行的数量 批量生成缩略信息时,直接把一百次请求交给 Promise.all,往往会在很短时间内同时启动。聚合结果的方法本身不会替你控制连接数。真正需要限制的是“任务开始到结束”这段区间里,有多少项工作处于活跃状态。解决办法是先... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python gzip 可重复压缩:内容相同,时间戳和文件名为何仍会改变输出 解压后一样,压缩包却总在变化构建脚本每次生成相同文本,再压缩成 gzip,发布系统却认为产物发生了变化。检查解压内容完全相同,直接比较压缩字节又确实不同。gzip 除了保存压缩数据,还可以在头部记录时间和原始文件名,... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python Queue 任务确认:队列已经空了,为什么 join 还可能继续等 从队列取走,不代表已经处理完批处理程序把任务放进队列,由工作线程逐一取走。主线程看到 empty 返回真便宣布完成,却发现输出文件还没生成。原因是队列为空只描述等待领取的项目,不包括已经被领取、仍在执行的任务。完成判... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读