在我正在进行的项目中,我们保留每个功能都有自己的功能,并在功能准备好后将其合并回主功能。每个功能分支内的提交可能包含许多“WIP”和其他功能的破坏功能,直到它完整和稳定。
无论如何,由于master分支的提交是唯一的(假定的)稳定的,我只希望git bisect
在那个分支上。
有没有办法仅在一个分支上限制git bisect
?
答案 0 :(得分:20)
没有进一步的工作,没有简单的方法可以做到这一点。在玩了一会儿后,我有一些可能对你有用的东西。
git bisect start master f9d5924
for rev in $(git rev-list f9d5924..master --merges --first-parent); do
git rev-list $rev^2 --not $rev^
done | xargs git bisect skip
这会启动git bisect,f9d5924
作为您的良好提交,master
作为您的错误提交。然后它找到每个合并提交右侧的祖先不在左侧。它将这些祖先传递给git bisect skip
以跳过它们。但是当它确定哪个提交不好时,它将显示来自错误合并提交的所有可能的跳过提交。如下
$ git bisect good
There are only 'skip'ped commits left to test.
The first bad commit could be any of:
0622204625d8817c5d8fd1a2a68b3aa91f2dcdf9
0c771566b9e77e3bdc0a66a7404c8eae9f321a68
5098b44f43f84b213eaab110073a6acd26a5cc02
8b05a808d5e15852fbddaa529ba241fdac8ff693
b0c755c3fa57e3c8d527e76fae38bc9925c01353
We cannot bisect more!
在这种情况下,b0c755c3fa57e3c8d527e76fae38bc9925c01353
是失败的合并提交。
编辑:如果您有章鱼合并,这将不。
答案 1 :(得分:0)
我认为带有git bisect
标志的--no-parent
可以很容易地做到这一点,但它不存在。
我唯一能想到的就是在新分支中重新创建分支提交。这是Linux shell中的一个例子:
$ git branch bisecttemp <first>
$ for h in `git log --oneline --decorate --first-parent --reverse --format=%H <first>..<last>`; do git checkout -f $h; sleep .5; git reset bisecttemp; git commit -am"$h"; git checkout testing; git reset --hard HEAD@{1}; done
这使得bisecttemp分支脱离了我们关心的<first>
提交,获取了我们关注的范围内<first>
和<last>
提交之间的哈希列表,访问每个,在不改变工作树的情况下,重新设置回bisecttemp分支,提交与它所来自的提交的哈希值不同的一切,再次检出bisecttemp,然后将其重置回头部的最后一个位置,这是新的提交。
可能有一种更聪明的方法来完成所有这些,但基本的是它在我们关心的提交范围的开始之外创建一个新的分支,然后提交仅分支提交的状态(常规提交)并按顺序合并,但不合并任何子分支。你不能只是在这里挑选,因为樱桃选择看父母,这会在合并提交中失败。
这未经过实际测试,可能都是错误的。这只是一个想法。它可以在一个提交一系列提交的函数中汇总。
答案 2 :(得分:-1)
我也想要一个适当的本地到git的解决方案来解决这个问题,只检查单个分支上的提交,从而“责备”整个合并和/或Pull Request。但是:
因为master分支的提交是唯一的(假定的)稳定的,所以我想只在那个分支上进行git bisect。
如果提示此问题的问题是您提交的某些提交已损坏且您无法测试,则可以使用:
git bisect skip
完全跳过该提交并检查另一个提交。这将解决您在提交失败时遇到的问题。一旦找到破坏该功能的提交,您就可以将其跟踪到合并到您正在跟踪的分支中。
我想你甚至可以通过手动检查或通过脚本来git bisect skip
所有未合并的提交。这会产生问题中提到的行为。
答案 3 :(得分:-2)
在一个分支上使用git bisect而不检查master:
在你要测试的分支上。
git bisect start --no-checkout
这将仅启动当前分支上的bisect
正常继续你的bisect。