4

在使用 Mercurial 时,如果我想用特定的版本更改当前的工作副本,我只是这样做:

$> hg revert good_revision
$> hg commit -m "Now I'm in the good revision"

然后我可以看到我所有的文件都处于good_revision状态并且可以开始处理它。

到目前为止,我可以在化石上进行还原,但只能在特定文件上进行还原,而不是在整个存储库上进行还原,并且更新或签出似乎没有像我预期的那样工作。

化石如何将我的整个存储库恢复到某个版本?

4

3 回答 3

7

我不确定我是否完全遵循,但我认为您想要的是能够在 Fossil 中创建“一个分支上的多个头”。如果是,那么 Fossil 确实支持这一点,只是它将分支的头部称为“叶子”,这个过程称为“分叉”。

为此,您

fossil update good_revision

接着

fossil commit --allow-fork

您现在可以生成fossil ui,导航到您的分支并看到它有两片叶子。

您现在可以关闭当时的叶子。

请注意,虽然受支持,但这似乎不是推荐的做法。相反,Fossil 建议使用一种相当奇特的方法来丢弃更改:

  1. 将“坏”叶处的分支重命名为“错误”(如果该分支尚不存在,则创建该分支)。通过这样做,您可以有效地将生成的子叶“标记”为错误。

    请注意,名称“错误”名称只是一个约定;此分支在新创建的存储库中不存在。

  2. 关闭“坏”叶子。

  3. 使用 回到最后的良好状态fossil update,继续破解。

    由于那个“最后一次好”的提交仍然继承了其父提交的分支标签,你记录的下一个提交也将继承它并且不会在分支“错误”上。

举个例子,看看它在 SQLite repo 中的样子——这个分支上有一堆各种各样的短提交链。另请参阅

于 2014-07-07T17:00:32.820 回答
2

我对我认为我理解的问题的解决方案略有不同(意译:如何处理比我将称为 bad_leaf 的分支/主干的当前叶更旧的“good_revision”,并将自“good_revision”以来的更改视为坏),这相当于在两个版本之间应用差异,但从/到顺序相反:

使用来自 bad_leaf 的基线而不是默认的最后一次常见提交,合并来自 good_revision 的(空)分支;因此,将应用的差异是原始分支与您创建的 good_revision 分支的差异,因为它不会看到它们已经被应用。使用最新的作为基线“隐藏”那些否则会使它忽略所有更改,因为它们已经应用。

fossil update good_revision
fossil commit --allow-fork --allow-empty
# note the uuid from that commit (for use as forked_basis below)
fossil merge -f --integrate --baseline bad_leaf forked_basis

那么当然曾经快乐过,

fossil commit

它不会创建任何应该称为“错误”的分支,它只是将从 good_revision 到 bad_leaf 的反向差异应用到 bad_leaf 中,让您回到原来的位置,您可以继续提交过去的相同(新)叶子在bad_leaf。

diff与上述命令匹配后的结帐相比,在原始 good_revision 处结帐的(直接 gnu,不是化石差异)。除了丢失文件的空目录外,fossil 无论如何都不会跟踪/整理死目录。

警告:我使用化石的时间不长,它在几个方面与我习惯使用 cvs/svn/git/hg/perforce/clearcase 的常见方式不同。

添加此答案的原因:我发现现有的答案更难理解,因此不确定我是否相信自己能正确地做到这一点。

于 2015-10-28T18:16:22.350 回答
2

如果我正确理解您的问题,那么在开发周期中的某个地方存在问题,您现在想将一个或多个修订版本返回到已知的良好修订版本并开始使用它。此外,您希望该修订版成为您的主干。Fossil 中的方法与 Mercurial 中的方法类似:

fossil revert -r good_revision
fossil commit -m "Now I'm in the good revision"

这会将工作目录中的文件替换为指定修订版中的文件。提交会将它们提交到您正在处理的任何分支(我假设它是本示例中的主干)。如果您不指定修订号,它将使用最后提交的版本。

revert命令更常见的用法之一是回滚单个文件:

fossil revert  -r good_revision  my_file
    (or)
fossil revert  my_file_from_the_last_commit

但是,如第一个示例所示,省略文件名会导致所有文件都被还原。有关详细信息,请参阅https://www.fossil-scm.org/index.html/help?cmd=revert

很抱歉最近的回复,但我只是在寻找其他东西时遇到了这个问题。我发布这个以防其他人正在研究如何恢复到存储在 Fossil 中的先前提交的版本。

于 2016-10-19T22:31:13.157 回答