我在过去10次提交中的某个地方出现了这个错误。我已经尝试使用diff工具查看我所做的每一个更改,但无法弄明白。
现在我想逐个回滚到每个版本,找到没有bug的最后一个版本,希望这样我可以解决问题。
在保持最新提交安全的同时回滚到以前版本的最佳方法是什么。
答案 0 :(得分:5)
我建议使用git bisect
来追踪错误。
一般的想法是,如果你大概了解何时出现错误,git可以对导致该错误的提交进行二进制搜索。该文档包含大量示例和详细说明。一个简单的例子:
git bisect # Start the bisect process
git bisect bad # This tells git bisect that the current commit is "bad", as in the bug is exhibited
git bisect good <commit hash> # This tells git bisect that <commit hash> doesn't exhibit the bug, so we only need to search between "good" and "bad". This would be your commit hash from 10 commits ago as mentioned in your question.
之后,git将签出提交。然后你可以编译它,运行它,然后使用git bisect good
或git bisect bad
来告诉git是否展示了这个bug。它将使用此反馈来确定引入“不良”行为的确切提交。
您也可以使用git bisect reset
取消二等分过程。
答案 1 :(得分:1)
您可以使用git checkout <commit_hash>
答案 2 :(得分:1)
你可以尝试的最好的是二等分。 https://git-scm.com/docs/git-bisect
答案 3 :(得分:1)
您无需回滚每次提交。使用git bisect。
此命令使用二进制搜索算法查找中的提交 你的项目历史引入了一个bug。你首先告诉它使用它 它是一个“坏”提交,已知包含该错误,并且“好” 在引入错误之前已知的提交。然后是git bisect在这两个端点之间选择一个提交并询问您是否 选定的提交是“好”或“坏”。它继续缩小 范围,直到找到引入更改的确切提交。
答案 4 :(得分:1)
如果你有一个分支指向你的最新提交,只要你不移动那个分支就是安全的。如果您在最近一次提交时没有分支,则需要使用git branch <new_branch_name>
创建一个分支。
在这种情况下,您不需要查看每个提交,如果您对该错误进行了很好的自动化测试,则除了一个提交之外,您不需要手动查看任何提交失败了。您可以使用git bisect
。