我正在做一些回归测试,寻找我在项目中引入的错误,基本上是克隆当前存储库,删除 x提交并测试错误出现的位置......我想探索其他替代方案。
通常的做法是从存储库中的当前工作时刻创建新的分支,此时我希望我已经创建了一个新的分支 x提交前......因为我没有,我想知道是否有可能从给定的提交创建一个新分支,例如从 4 次提交之前......有什么办法吗?
我正在做一些回归测试,寻找我在项目中引入的错误,基本上是克隆当前存储库,删除 x提交并测试错误出现的位置......我想探索其他替代方案。
通常的做法是从存储库中的当前工作时刻创建新的分支,此时我希望我已经创建了一个新的分支 x提交前......因为我没有,我想知道是否有可能从给定的提交创建一个新分支,例如从 4 次提交之前......有什么办法吗?
尽管 Nicolas 的回答直接回答了您的问题,但由于您正在寻找替代方法来隔离为您的项目引入缺陷的提交,我建议您使用git bisect进行调查。
git bisect
它的设计目的是优化检索(使用二进制搜索)引入问题的提交。要使其正常工作,您必须提供 2 个初始参考点:
例如,假设您知道您当前的分支存在问题。尽管您不知道问题出现在哪个精确提交中,但您可以确定 100 次提交之前(比如说)问题不存在。然后您将按如下方式开始调查:
...
git bisect bad
它表明当前提交存在问题,并且git bisect good abc123def456
表明您至少确定该提交中不存在问题abc123def456
。有了这些信息,git 现在会自动选择(使用二进制搜索算法)提交到结帐。
现在轮到您测试该提交以查看缺陷是否存在。如果选择的提交有缺陷,那么你必须用命令指出它:
但是如果提交没有缺陷,那么你必须用以下方式指出它:
根据您的回复,git 现在会自动选择另一个提交来结帐。同样,您必须测试此提交以查看缺陷是否存在,并且您必须使用
git bisect bad
or指示它git bisect good
。这个过程连续进行(并且二进制以最小化您需要检查的提交数量),直到最终 git 告诉您哪个提交导致引入了缺陷。
最后,一旦调查结束,你会得到:
...这将使您回到开始之前的初始状态
git bisect
。您可以使用此选项:
使用符号引用也是有效的,但我每天都使用这个选项,对我来说似乎更简单、更灵活。