在git bisect中,如果被提交的提交是一组感兴趣的提交的成员,我想采取特定的操作。具体来说,请考虑这种情况:
----------C-------- A
\---B---/
B和C都可以从A到达但不能彼此到达。在bisect期间,我想对可以访问B的提交应用补丁,因为B引入了一个不相关的错误,我想过滤掉那些噪音。检查C时不应该应用补丁。
通常,最好的方法是测试提交C是否在从提交A开始可以从哪个B提交的提交集中?理想情况下,它可能是一个我可以传递给git rev-list的表达式,但我怀疑它需要更多。
答案 0 :(得分:0)
测试commit $QA
(可疑的祖先)是否实际上是commit $PC
(可能的孩子)的祖先:
git merge-base --is-ancester $QA $PC
如果$QA
实际上是$PC
的祖先,则运行此命令的退出代码结果为0(true),如果$QA
不是祖先,则为非零(false) $PC
。 (如果两个提交相同,则退出代码为0:提交被认为是它自己的祖先。要分离出这种情况,只需将两个提交标识符解析为哈希并测试哈希是否相等。如果标识符是已经哈希,只需使用if [ $QA = $PC ]
或类似内容,否则请使用git rev-parse
进行哈希转换。)
在git bisect
期间,$PC
提交测试只需HEAD
,您必须进行两项测试(针对B
和{{1} }})。