git - 如何使用 git bisect : Using unit tests for determining the errorneous commit?

标签 git unit-testing git-bisect

我是 git 新手,刚刚发现“git bisect”。当您可以使用新编写的单元测试(事先没有)检查错误时,通常如何使用它?

假设我们有一个包含单元测试的存储库,但是 - 通常 - 它们并不完整。在某些版本中,我们发现某个功能无法正常工作,但我们知道它在之前的某个版本中是有效的。不幸的是,该功能未通过单元测试进行检查。我现在想做的是:

  1. 编写测试用例(当然首先失败)
  2. 使用此测试用例使用 git bisect 查找引入错误的提交
  3. 更正错误并提交修复(和测试用例)

这个用例有一个问题。由于 git bisect 检查旧版本,刚插入的测试用例不会在那里,所以我不能用它来检查错误。我可以尝试不提交测试,但将其保留为本地更改。但是假设测试文件在中间的某个版本中发生了更改,我很可能会遇到 merge 冲突。

那怎么办? git bisect一般怎么用?

最佳答案

我通常使用 bisect 来识别何时引入了错误,这样我就可以查看单个提交以找出错误的原因。当我知道某些东西曾经有效而现在无效时,这很有用。我首先选择或找到一个有效的旧提交,用 git bisect good 标记它,用 git bisect bad 标记它的头部,然后完成对分直到 git 告诉我提交引入了问题。有时我可以在开始这个过程之前编写单元测试,有时我不能在看到引入错误的代码之前编写它。

所以,假设我有单元测试,或者我在执行 git bisect 过程时需要在每个点使用的一些其他代码或脚本。 stash 对于我随身携带它很有用。所以,

git stash save blah
git bisect bad (and now I'm on a new commit)
git stash pop
mvn clean test

git stash save blah
git bisect good
git stash pop
mvn clean test

等等。

关于git - 如何使用 git bisect : Using unit tests for determining the errorneous commit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12760450/

相关文章:

git - 是否可以从存储中应用单行?

asp.net-mvc - 对 MVC View 进行单元测试意味着什么?

git - 如何中止 Git Bisect

git - 如何仅在更改特定文件的提交上运行 git bisect?

android - Android Studio 中分离的 HEAD 问题

没有 X11 的 gitk

Angular - 使用 PrimeNg 表进行 Jasmine 测试 - 无法验证单元测试中的行数

git - `git bisect` 或 `git log -S --all` 找不到 merge 提交所做的更改

git send-email 发送邮件失败

Angular Jest 测试打开 MatDialog 的组件 - 打开不是函数