如何测试提交是否在集合中?

时间:2016-08-17 17:48:41

标签: git git-bisect

在git bisect中,如果被提交的提交是一组感兴趣的提交的成员,我想采取特定的操作。具体来说,请考虑这种情况:

----------C-------- A
      \---B---/

B和C都可以从A到达但不能彼此到达。在bisect期间,我想对可以访问B的提交应用补丁,因为B引入了一个不相关的错误,我想过滤掉那些噪音。检查C时不应该应用补丁。

通常,最好的方法是测试提交C是否在从提交A开始可以从哪个B提交的提交集中?理想情况下,它可能是一个我可以传递给git rev-list的表达式,但我怀疑它需要更多。

1 个答案:

答案 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} }})。