git-extras 的 git missing:精准查看两个分支之间缺失提交的命令行指南
发布时间:2026/10/3 8:30:00 锦皓数字建站

开发工具CLI版本控制【免费下载链接】git-extrasGIT utilities -- repo summary, repl, changelog population, author commit percentages and more项目地址https://gitcode.com/gh_mirrors/gi/git-extras点击查看免费下载导读git missing是 git-extras 工具集中用于分支提交差异诊断的实用命令它的核心能力是一次性列出“只存在于两个分支中任意一个、但不存在于另一个”的全部提交从而让你在合并merge或推送push之前快速判断哪些提交会进入对端、哪些仍留在本地。读完本文你将掌握该命令的完整语法、参数语义、底层实现原理基于git log的三点语法与--left-right标记并能配合 pathspec 限定目录进行精细化比较。功能定位一次看清两个分支“各自独有”的提交在日常协作中我们经常面临这样的问题master和feature分支各自前进了几步想确认合并前双方各自新增了哪些提交或者本地分支领先远端想知道推上去会带上什么。普通git log master..feature只能列出单方向差异而git missing展示的是双向对称差集——任何只存在于其中一个分支的提交都会出现在结果里并用和明确标注它属于哪一侧。该命令的官方定义见 man/git-missing.mdShows commits that are in either of two branches but not both. Useful for seeing what would come across in a merge or push.同仓库的 Commands.md 也给出了同样的描述“Print out which commits are on one branch or the other but not both”并支持用路径限定比较范围。语法与参数说明完整语法SYNOPSIS如下git-missing [first branch] second branch [git log options] [[--] path...]参数逐一拆解参数含义说明[first branch]参与比较的第一个分支可选。省略时默认为当前检出的分支second branch参与比较的第二个分支必填。与 first branch 一起构成比较对[git log options]透传给git log的任意参数如--no-merges过滤合并提交、--oneline等[[--] path...]可选 pathspec路径限定把比较范围限制到指定文件或目录用--明确分隔路径与分支/选项其中 pathspec 是 Git 官方的路径匹配语法支持 glob 通配等模式。原文档的参考指向 Git 术语表gitglossary这里直接以仓库内命令 bin/git-missing 的解析行为为准展开。从源码看参数如何被解析虽然手册只说明了“有哪些参数”但要真正用对--与 pathspec理解 bin/git-missing 的解析逻辑是关键。该脚本本质是一个约 50 行的 Bash 脚本核心是循环遍历参数并分类declare -a git_log_args() declare -a branches() declare -a pathspec() declare parse_pathfalse for arg in $ ; do if [[ $parse_path true ]]; then pathspec($) # 遇到 -- 后剩余全部视为 pathspec break fi case $arg in --) parse_pathtrue ;; # 显式分隔符之后都是路径 --*) git_log_args( $arg ) ;; # 以 -- 开头的参数透传给 git log *) branches( $arg ) ;; # 其余按分支收集 esac done由此可以得出三条关键行为--之后的参数全部进入 pathspec脚本直接取剩余所有参数因此 pathspec 可以同时传多个文件或目录以--开头的参数如--no-merges、--oneline被收集进git_log_args原样透传给底层git log——这也是手册说“任何应传给 git log 的 flags 均可使用”的实现依据不带--前缀的普通参数按分支收集收集到 2 个则分别作为 first、second branch收集到 1 个则仅作为 second branch此时 first 默认当前分支数量不符则报错error: at least one branch required并以退出码 1 结束。分支数量校验if [ ${#branches[]} -eq 2 ]; then firstbranch${branches[0]} secondbranch${branches[1]} elif [ ${#branches[]} -eq 1 ]; then secondbranch${branches[0]} else echo 2 error: at least one branch required exit 1 fi注意一个边界情况如果既没有--、又只传了一个分支那么path会被误判为分支名。因此只要同时使用路径限定与单分支形式就必须显式写--这正是语法中[[--] path...]中--存在的意义。底层实现一次git log调用完成双向比较参数整理完毕后脚本只执行一条命令完成全部工作git log ${git_log_args[]} $firstbranch...$secondbranch \ --format%m %h %s --left-right -- ${pathspec[]}这条命令的三个要点三点语法first...second三个点等价于对称差集列出“在两侧任一分支有、但不同时存在于两侧”的提交这正是“missing”语义的底层来源。注意它和两点语法first..second仅列 second 独有提交有本质区别--left-right在每个提交前加或标记标注该提交属于左侧分支还是右侧分支对应输出中的 d14b8f0与 97ef387--format%m %h %s%m输出左右标记配合--left-right使用%h输出短哈希%s输出提交主题subject最终形成 短哈希 主题这一紧凑可读的输出格式。由于所有自定义参数如--no-merges都被插在命令前部它们会与git log的原生选项正常组合生效pathspec 通过--放在命令尾部避免与分支参数冲突。实战示例示例一比较当前分支与 master$ git missing master d14b8f0 only on current checked out branch 97ef387 only on master省略第一个分支时first 分支默认为当前检出分支。表示该提交只存在于当前分支合并进来会带来的提交表示只存在于master。示例二比较两个具名分支$ git missing foo bar b8f0d14 only on foo f38797e only on bar两个分支都显式给出适合在分支间做“合并前预览”或者核对远端分支与本地分支的双向领先/落后关系。示例三限定路径比较$ git missing master -- src/ ed52989 only on current checked out branch, in src/ directory 7988c4b only on master, in src/ directory这里--之后的src/是 pathspec比较结果只包含涉及src/目录的提交。这在评估“合并是否会影响某个模块”时非常实用——例如只关心前端目录src/的改动就不用被其他目录的提交干扰。组合 git log 选项透传选项可用于进一步裁剪结果例如过滤合并提交只关心普通功能提交$ git missing master --no-merges 6a1b2c3 feat: add retry logic 84d9e1f fix: resolve timeout issue也可以配合--oneline等常用git log选项输出格式仍由脚本的--format覆盖但选项过滤行为照常生效。Shell 补全支持仓库为git missing提供了 Bash 补全见 etc/bash_completion.sh_git_missing(){ # Suggest all known refs __gitcomp $(git for-each-ref --format%(refname:short)) }补全函数通过git for-each-ref枚举仓库内所有已知引用分支、标签等的短名称在输入分支名时自动提示候选。也就是说分支参数部分享受原生补全而路径部分遵循 Git 自身的 pathspec 补全规则。安装 shell 补全后即可直接体验补全脚本位于仓库 etc 目录包含 Bash、Zsh、Fish 三个版本。与其他文档的关联使用与输出示例还可参考 Commands.md其中保留了与该命令一致的双向差异说明与两条示例roff 格式的手册页位于 man/git-missing.1内容与 man/git-missing.md 保持一致供man系统渲染使用该命令的原始作者为 Nate Jones见原文档 AUTHOR 一节。小结git missing用一个分支参数即完成双向差异扫描其价值在于把“合并/推送前需要确认的内容”以对称差集的形式一次性呈现配合--no-merges等git log选项和-- pathpathspec 限定可以灵活地聚焦到任意维度。理解其底层“三点语法 --left-right%m %h %s格式”的实现后你不仅能熟练使用它还能举一反三地组合原生git log能力做更复杂的提交分析。赞分享开发工具CLI版本控制【免费下载链接】git-extrasGIT utilities -- repo summary, repl, changelog population, author commit percentages and more项目地址https://gitcode.com/gh_mirrors/gi/git-extras点击查看免费下载相关推荐git-extras 的 git-squash 命令详解将分支/提交区间压缩为单次提交git extras 的 git squash 命令详解将分支/提交区间压缩为单次提交 导读 git squash 是 git extras 工具集中用于 历开发工具CLI版本控制解决TypeScript模拟数据痛点Intermock处理联合类型与交叉类型的技巧解决TypeScript模拟数据痛点Intermock处理联合类型与交叉类型的技巧 TypeScript开发中模拟数据生成常常面临联合类型Union Ty开发工具CLI版本控制30 seconds of code 实践用 git shortlog 查看两个提交之间的变更摘要30 seconds of code 实践用 git shortlog 查看两个提交之间的变更摘要 git shortlog 是 Git 自带的一个提交历史教程文档上一篇3分钟实战指南用ncmdumpGUI高效解密网易云音乐NCM格式下一篇awesome-gpt-image-2532 个 GPT-Image2 提示词案例 21 套工业级模板5 分钟完整拆解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。