我想在本地测试的5个PR,对git命令感到困惑

问题描述

3个月前,有5个PR被合并到我们的存储库中。

这些PR之一引起了问题。

我希望回溯到合并每个PR的时间,在本地进行测试,并将问题归结为一个有问题的PR。我不想承诺要掌握任何东西。

所以我打算去每个PR,找到最终的SHA,然后运行:

git checkout <SHA> #checks out/downloads all work up to commit id,discards any commits made after this date locally
git checkout -b bugIsolation

我希望这项工作能/是否有一种更清洁或更佳的方法来实现?

解决方法

我想说git bisect是您要寻找的工具。您所描述的事情会稍有不同。该命令使用二进制搜索来查找引入该错误的提交,而不是像您描述的那样手动多次检出内容:

git bisect start
git bisect good <good revision>
git bisect bad <bad revision>

在这些命令之后,git会告诉您一些内容:

Bisecting: N revisions left to test after this (roughly M steps)
[d4a69a45398cf729c089087030da7d7a7a088802] <commit message>

Git将自动检出<bad revision><good revision>之间的“中间”提交。现在该轮到您检查当前修订版是否有效了。

当您发现当前版本不正确时,您将使用git bisect bad告诉git。如果当前版本良好,则使用git bisect good。重复这种行为,直到您发现一个引入该错误的提交为止。

还有一个选项可以使检查过程自动化-git bisect run就是为此目的。

完成后,您发现正在使用git bisect reset的错误提交,这将签出从等分开始的修订。