Hg:如何逐步走过changsets?

时间:2010-07-01 06:22:58

标签: mercurial tortoisehg

我是Hg的新手。我有一个功能,但现在不是。我希望逐步恢复更改,直到我进入修订版本。我不太确定最好的办法是什么。

我尝试将repo克隆到旧版本,并看到它在那里工作。那么......现在我如何更新后续更改?在克隆的仓库中,defaulttip版本是我克隆到的版本。

我需要应用补丁吗?搁置变化?我不太确定。

3 个答案:

答案 0 :(得分:3)

您应该使用bisect command快速找出功能何时停止工作。它的工作原理如下:

首先重置bisect状态,并将当前工作目录的父版本标记为错误:

hg bisect --reset
hg bisect --bad

现在猜一下您认为该功能何时起作用。如果您认为它在6月1日工作,那么您可以

hg update -d '<Jun 1'

update command是用于更新工作目录以匹配给定变更集的内容。有关日期格式列表,请参阅hg help dates。您现在应该测试此修订版,如果此功能在此处工作,那么您将其标记为良好:

hg bisect --good

如果此功能在此更改集中无效,则将其标记为错误并进一步更新到过去:

hg bisect --bad
hg update -d '<May 1'

重复此操作,直到找到一个好的修订版。当您找到一个好的修订版时,Mercurial可以开始帮助您:好的和坏的变更集之间的变更集必须包含错误。 Mercurial将通过跟踪候选变更集列表来帮助您,并帮助您将列表缩小到单个变更集。它通过将您更新为大致位于候选者中间的变更集并要求您测试此变更集来实现此目的。

测试后,您将变更集标记为好或坏。如果你把它标记为好,那么你知道这个错误将来会更进一步,如果你把它标记为坏,那么这个错误就在于过去。在任何一种情况下,你都会在每一步中削减一半的候选人!这意味着您只需要10个步骤来测试1024个候选者 - 这是对数的强度:-) Mercurial将跟踪候选人并在每次测试后将您更新到新的位置。

完整的会话可能看起来像这样(我只是随意说好/坏):

% hg bisect --reset
% hg bisect --bad
% hg update -r -100
61 files updated, 0 files merged, 9 files removed, 0 files unresolved
% hg bisect --good
Testing changeset 11414:0fa4474bdc2f (99 changesets remaining, ~6 tests)
46 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --good
Testing changeset 11439:778377be3662 (50 changesets remaining, ~5 tests)
17 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
Testing changeset 11428:4d03c3680400 (25 changesets remaining, ~4 tests)
6 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
Testing changeset 11420:a99ef3711890 (13 changesets remaining, ~3 tests)
3 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
Testing changeset 11417:6f1d1ed3e19a (6 changesets remaining, ~2 tests)
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --good
Testing changeset 11418:67bb9d78f05e (3 changesets remaining, ~1 tests)
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
% hg bisect --bad
The first bad revision is:
changeset:   11418:67bb9d78f05e
user:        Matt Mackall 
date:        Mon Jun 21 13:25:42 2010 -0500
summary:     merge: sort arguments to stabilize the ancestor search

答案 1 :(得分:0)

我将使用

遍历剩余的更改集
hg pull -r <revision> [<original repo>]

一些文档here

答案 2 :(得分:0)

要查找缺少该功能的修订版,您可以尝试hg bisect。 你可以找到它here

tip repo中的最新修订版,default分支的名称,默认情况下在创建它时在repo中。您可以通过拉动它们来添加剩余的变更集(更改)。

hg help pull