如何对`git bisect run`的退出码进行取反操作?
解决git bisect run取反退出码的优雅方案
针对取反命令退出码的几种简洁写法
如果需要在git bisect run中取反命令的退出码(比如要定位首次引入某行代码的提交,需要当代码存在时标记为「坏提交」,不存在时标记为「好提交」),可以用以下几种优雅方式替代繁琐的bash -c "...":
直接用shell的
!运算符配合sh -c
这是最简洁的写法,利用shell的逻辑非运算符取反命令的退出状态:git bisect run sh -c '! ag "$1"' -- my-search-phrase其中
--用来分隔sh的参数和搜索短语,避免短语中包含破折号时出现解析问题。自定义一个通用的「取反脚本」
如果经常需要做这类操作,可以写一个简单的脚本(比如命名为not):#!/bin/sh # 执行传入的命令,然后取反退出码 "$@" exit $((1 - $?))给脚本添加执行权限:
chmod +x not,之后就能直接用:git bisect run ./not ag my-search-phrase这个方式可读性极强,适合频繁使用的场景。
补充:关于git log -S未找到合并提交引入代码的问题
如果git log -S<phrase>没定位到合并提交引入的代码,可以试试:
- 加上
--merges参数专门筛选合并提交:git log -Smy-search-phrase --merges - 如果只关心主分支的首次引入,用
--first-parent参数跟踪主分支提交链:git log -Smy-search-phrase --first-parent - 知道代码所在的函数或文件时,用
-L参数精准定位:git log -L :my-function:path/to/file
内容的提问来源于stack exchange,提问作者Max Görner
相关产品推荐
相关产品推荐

