如何在一个分支的提交中"git bisect"?

Kos*_*tas 29 git version-control git-bisect

在我正在进行的项目中,我们保留每个功能都有自己的功能,并在功能准备好后将其合并回主功能.每个功能分支内的提交可能包括许多"WIP"和其他功能的破坏功能,直到它完整和稳定.

无论如何,由于主分支的提交是唯一的(据称)稳定的,我只想git bisect在那个分支上.

有没有办法限制git bisect只有一个分支?

Tom*_*ler 21

没有进一步的工作,没有简单的方法来实现这一点.玩了一会儿后,我有一些可能对你有帮助的东西.

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
Run Code Online (Sandbox Code Playgroud)

这将启动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!
Run Code Online (Sandbox Code Playgroud)

在这种情况下b0c755c3fa57e3c8d527e76fae38bc9925c01353,合并提交失败了.

编辑:如果您有一个章鱼合并,这将无法正常工作.

  • 我认为`git bisect`需要一个`--first-parent`标志,并附有描述.它只会遍历提交并合并实际分支的提交,而不是其合并的分支或分支气泡.你要么在你的分支上找到提交,在其他人之间找到提交,要么你完成了合并提交,并且知道问题是在那个时候合并的分支中的某个地方. (4认同)