Git回滚然后在提交中前进

时间:2014-03-13 11:42:35

标签: eclipse git github egit revert

我在github上有一个项目,克隆到本地仓库。在过去的40次提交的某个地方,我改变了一些破坏代码的东西,直到现在才意识到它。所以我有两个问题:

“回滚”的最佳方法是什么,或者我想,将我的本地回购还原到提交40次提交之前。没有推到主回购obv。

然后通过提交的最佳方式是什么才能让我在每个步骤之后构建并找到导致代码中断的那个?

即。在我脑海中,我想象一个类似的序列:

  • 回滚提交
  • 构建代码
  • 它破了吗?
  • 如果没有前进到下次提交

循环:

  • 打破了
  • 如果没有前进到下一次提交并跳转到循环
  • 否则我发现了问题的变化。

我在eclipse中使用egit插件,虽然可以使用git bash,如果这让事情更简单,但我几乎是一个git cmd n00b,所以我将一步一步地需要它。

1 个答案:

答案 0 :(得分:2)

返回上一个已知的工作提交:

$ git checkout HEAD~40

将在HEAD之前检出分离的HEAD状态为40次提交(或者您可以使用提交哈希)。

要查找错误提交,您可以使用git bisect,如下所示:

$ git bisect start
$ git bisect HEAD
$ git bisect HEAD~40

此过程将对错误的提交良好提交范围进行二进制搜索,以帮助您找到错误的位置。有关如何运行此过程的更多详细信息,请参阅文档。但一般来说,最好有一个可以运行测试的脚本(成功时存在退出代码0),这可以使整个过程自动化:

$ git bisect run run_tests.sh args