如何使用 Git 平分
如何找到哪个提交引入了回归
IE。你知道昨天的ImageJ Ops库版本运行得很好,但今天却崩溃了?
Git-bisect 来救援!
git bisect start
git bisect bad HEAD
git bisect good HEAD@{yesterday}
这将开始二分过程,即尝试找到一个在坏作业和好作业之间“中间”的修订(您将在这个过程中将越来越多的作业标记为好或坏,并且通过推断,好作业的祖先将被认为是好的,坏作业的后代也会被认为是坏的),并让您测试它。
在我们的例子中,我们只运行单元测试:
mvn clean test
如果测试尚未确定(例如:它无法编译,因此您不知道有问题的单元是否测试通过),则其标记为
git bisect skip
否则,将其标记为“坏”或“好”。
迟早(通常是更早),Git 会告诉你哪个工作是罪魁祸首。你可以查看相应的片段
git show <commit name>
其中提交名称是 Git 告诉您的第一个错误提交的 40 位十六进制字符串。通常您会立即结束二分过程:
git bisect reset
这意味着您回到开始之前所在的修订版本和分支。
如何转发端口修复
如果补丁有明显的缺陷,就尝试修复它。您必须首先移动到第一个错误的修订版:
git checkout <commit name>
(这会警告您,您不在任何分支上,但是没关系。)然后只需应用您想要的修复,然后提交(当然,在确保其有效之后;-)。现在,用临时标签标记它:
git tag my-fix
返回您来自的分支:
git checkout main
如果您不确定自己来自哪个路径,请先查看reflog。
现在您可以选择(或转发)您的补丁:
git cherry-pick my-fix
如果存在冲突,请解决它们并提交(“git commit fiji.cxx”)。
之后,您可以删除现在已过时的标签:
git tag -d my-fix
注意:您可以使用 HEAD 引用的 reflog (git cherry-pick HEAD@{1}) 替换临时标签,但如果您不熟悉这个概念,标签可能更容易处理。
#另请参阅
- Git 书籍的Binary search tutorial