Git 附注标签:标签的对象标识,为什么与它指向的提交不同 发布脚本把标签解析出的标识和构建提交标识直接比较,发现不相等,于是认定打错标签。然而这个标签可能正是指向正确提交的附注标签。两边比较的对象类型不同:一边是装着发布说明的标签对象,另一边才是包含代码快照的提交对象。轻量... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git diff --no-index:仓库外也能比较目录,退出码一却未必只有一种原因 拿到两份解压后的配置目录,想知道哪些文件变了,并不一定要先建立仓库。git diff --no-index 可以直接比较磁盘上的两个路径。它适合检查生成文件、发行包或导出结果,但命令返回非零时,脚本不能立即下结论说比... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git notes 追加提交备注:信息补上了,原提交为什么仍是同一个 代码已经提交并被别人使用,第二天才拿到测试结果。如果为了补一句验证说明而重写提交消息,提交标识也会变化,原有链接和协作记录需要重新核对。Git notes 提供另一条路:把补充说明挂到已有对象上,让原提交继续保持原样... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
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/ 2 阅读
Git stash 保存临时工作:未跟踪文件、apply 与 pop 各自留下什么 临时切走处理另一个问题前,执行 stash 后发现新建文件还在原地,通常不是保存失败。默认范围主要是已跟踪文件的修改,新建的未跟踪文件需要明确选择是否纳入。保存之前先看状态,才能知道工作现场究竟包含哪些部分。恢复动作... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Git bundle 离线迁移:完整包可以克隆,增量包还要核对前置提交 没有可用远程服务器时,要把一段仓库历史交给另一台机器,复制工作目录只能带走当前文件,无法自然保留提交关系。Git bundle 可以把对象与选定引用放进单个文件,再通过克隆或获取导入。它尤其适合离线搬运已经提交的历史... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git clean 先看预览:未跟踪目录、忽略文件和大小写选项分别覆盖什么 忽略列表并不是可以丢弃的清单构建结束以后,工作目录里可能混着生成文件、个人草稿和本地配置。它们有些未被跟踪,有些被忽略,外观上却都只是普通文件。git clean 根据版本控制状态与选项决定候选范围,并不知道某个文件... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git 判断提交是否已合入:祖先关系成立,和补丁内容相同是两回事 文件里已经有修改,提交为什么还没有合入维护分支里已经出现某次修复,脚本却说原来的提交不在这个分支历史里。这并不矛盾:修复可能通过 cherry-pick 重新形成了另一个提交。两次提交的内容改动可以相同,但父提交不同... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Git status 给脚本用:文件名带换行时,怎样正确解析改名记录 人能读懂的状态列表,不适合随手按行切开脚本想找出工作区里有哪些修改,常见起点是调用 git status,再按换行拆成多条记录。但文件名本身可以包含换行、制表符和空格,改名输出还会同时涉及两个路径。一次随手拆分,就可... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读