⚠️ 它俩和 merge --abort 差在哪

和上一条路线的 merge --abort 相比,revert / reset 【0】。

开始练习 →

revert 之后历史多长

把第 4 次提交(加上除法,也就是引入 bug 那次)revert 掉。运行下面这段程序: def revert(hist, target): """造一个反向提交接在最后,原来那次一个都不动"

开始练习 →

reset 之后呢

换成 reset 回到第 3 次提交(加上减法)。运行下面这段程序: def reset(hist, target): """把指针挪回去,之后的提交不再可达"""

开始练习 →

写一个 revert

补全 revert(hist, target):在历史末尾追加一次反向提交,原来那次一个都不动。 输出 revert 之后的历史长度。

开始练习 →

写一个 reset

补全 reset(hist, target):把历史截断到 target 那一次为止(包含它)。 输出 reset 到第 3 次之后的长度。

开始练习 →

⚠️ 两种撤销,历史一长一短

对同一段历史各做一次:revert 掉第 4 次、reset 回第 3 次。 两个长度拼起来输出(revert 在前)。

开始练习 →

bisect 靠的是什么前提

用二分法找引入 bug 的提交,前提是【0】。

开始练习 →

二分每一步在做什么

bisect 的每一步是【0】。

开始练习 →

⚠️ 二分找到的是哪一次

bisect 最终指出的那次提交是【0】。

开始练习 →

二分实际测了几次

七次提交,第 1 次是好的、第 7 次是坏的,bug 从第 4 次开始出现。运行下面这段程序: def bisect(ids, is_bad): good = 0 bad = len(ids) - 1 tried =

开始练习 →