我可以使用 git 来查找修复分支所需的提交吗?
Can I use git to find which commit is needed to fix a branch?
我有一棵 git 树,它看起来像这样:
master (test passes)
|
|
| stable (test fails)
| |
| /
+---
|
有一个测试在 运行 对 stable
分支时失败,但在 运行 对 master
分支时通过。由于它是一个复杂的多进程测试,因此很难调试。
我可以使用 git 来查找主分支中的哪个提交可以被挑选到稳定分支以修复测试吗?
两个分支上都有数百个提交,因此手动执行会很痛苦。
There are many hundreds of commits on both branches so doing it manually would be painful.
这是 git-bisect
的工作。
开始平分,git bisect start
。
你知道它在稳定版上失败了,把它标记为坏的。 git bisect bad stable
.
你知道它正在通过 master,标记为好:git bisect good master
Bisect 现在将 select 两者之间的提交并检查它。 运行 你的测试。如果通过,git bisect good
。它失败了,git bisect bad
.
Bisect 将选择另一个提交。做同样的事情。
重复直到 Git 找到开始失败的提交。因为它正在做一个 binary search,搜索数百个提交应该需要大约 20-30 个提交。您可以通过编写脚本来执行构建和测试并将其传递给 git bisect run my_script <args>
.
来自动化该过程
这取决于单个提交是失败的原因。如果您在开发过程中没有始终如一地进行测试,则可能会有一个更新的提交再次引入错误(回归)。您可能需要从更新的“好”提交开始再次一分为二。
有关详细信息,请参阅 git-bisect
documentation. They provide very clear instructions. Also this answer。
我有一棵 git 树,它看起来像这样:
master (test passes)
|
|
| stable (test fails)
| |
| /
+---
|
有一个测试在 运行 对 stable
分支时失败,但在 运行 对 master
分支时通过。由于它是一个复杂的多进程测试,因此很难调试。
我可以使用 git 来查找主分支中的哪个提交可以被挑选到稳定分支以修复测试吗?
两个分支上都有数百个提交,因此手动执行会很痛苦。
There are many hundreds of commits on both branches so doing it manually would be painful.
这是 git-bisect
的工作。
开始平分,git bisect start
。
你知道它在稳定版上失败了,把它标记为坏的。 git bisect bad stable
.
你知道它正在通过 master,标记为好:git bisect good master
Bisect 现在将 select 两者之间的提交并检查它。 运行 你的测试。如果通过,git bisect good
。它失败了,git bisect bad
.
Bisect 将选择另一个提交。做同样的事情。
重复直到 Git 找到开始失败的提交。因为它正在做一个 binary search,搜索数百个提交应该需要大约 20-30 个提交。您可以通过编写脚本来执行构建和测试并将其传递给 git bisect run my_script <args>
.
这取决于单个提交是失败的原因。如果您在开发过程中没有始终如一地进行测试,则可能会有一个更新的提交再次引入错误(回归)。您可能需要从更新的“好”提交开始再次一分为二。
有关详细信息,请参阅 git-bisect
documentation. They provide very clear instructions. Also this answer。