假设我在开发过程中发现了一个错误,我想进行回归测试,看看它何时推出。我希望能够回顾Git的历史,而没有分离HEAD的风险。理想情况下,我还想避免使用SHA(这是一个额外的步骤来查找和复制)并使用我当前在历史轴上的相对指针(排序为move -1
或move +2
)。
我没有看到一种简单的方法。好吧,除了后退(git reset --soft HEAD@{1}
)。但是前进呢?我是否必须回到上一次提交并通过不同的提交再次回滚?是否有人可以制作帮助命令并使生活更轻松的别名?
答案 0 :(得分:3)
您可以选择使用git bisect
(正如其他人告诉您的那样),或者只使用git checkout master~N
,N是从当前主服务器返回的提交数,这是您可以随时增加的数字或减少。不要害怕“超级头”状态 - 尽管有可怕的警告,但在这种状态下,没有什么不妥,特别是如果你没有犯下这种状态。 (您始终可以使用git stash
将修复(如果有)从该提交移动到当前主服务器。)
将分支重置为HEAD@{N}
可能是一个坏主意,因为该语法指的是reflog条目,它不包含整个历史记录,只包含当前分支的历史提示。
答案 1 :(得分:1)
这正是git bisect
的用途。
请注意,如Making git bisect
more useful中所述,您可以通过运行回归测试来避免将每个迭代器手动标记为“好”或“坏”,并让git bisect
标记提交,具体取决于退出脚本的状态:
prove t/test/that/fails
git bisect good
prove t/test/that/fails
git bisect bad
无论
git bisect
多么精彩,我都讨厌无聊的重复。但是,您也可以将其自动化。在您启动bisect并将开始和结束提交标记为好与坏之后,您可以执行以下操作:
git bisect run prove t/test/that/fails
git bisect
将很乐意为您运行测试,并使用程序的退出代码将提交标记为好或坏。你只需坐下来等待它完成 很多更好。