化石SCM -恢复到特定的版本,如Mercurial



在使用Mercurial时,如果我想使用特定版本更改当前工作副本,我只需:

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

然后我可以看到我所有的文件都是int good_revision状态,可以开始工作了。

到目前为止,我可以在化石上做一个恢复,但只能对特定的文件,而不是整个存储库,更新或签出似乎不像我期望的那样工作。

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

我不确定我是否很明白,但我认为你想要的是能够在Fossil中创建"一个分支上的多个头"的情况。如果是,那么Fossil确实支持这个,只是它把分支的头称为"叶子",这个过程被称为"分叉"。

要做到这一点,

fossil update good_revision

fossil commit --allow-fork

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

您现在可以关闭当前页。

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

  1. 将"bad"叶子处的分支重命名为"mistake"(或者创建该分支,如果它还不存在)。通过这样做,你可以有效地"标记"结果子叶为错误。

    请注意,名称"错误"名称只是一个约定;

  2. 关闭"坏"叶片

  3. 使用fossil update恢复到last-good状态,继续黑客攻击

  4. 由于"last-good"提交仍然继承其父提交的分支标签,您记录的下一次提交也将继承它,而不会在分支"错误"上。

举个例子,看看它在SQLite repom &mdash中的样子;在这个分支上有一堆不同的短提交链。

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

从good_revision中合并一个(空)fork,使用bad_leaf的基线而不是默认的最后一次公共提交;因此,将被应用的差异是原始分支的差异,返回到您创建的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(直接gnu,不是化石diff)与在原始good_revision处签出相比,在上述命令匹配后签出。除了那些丢失了文件的空目录,但是fossil不会跟踪/清理死目录。

警告:我使用fossil的时间不长,它与我常用的cvs/svn/git/hg/perforce/clearcase有很多不同之处。

添加此答案的原因:我发现现有的答案更难理解,并且不确定我是否相信自己能够正确地完成它们

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

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

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

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

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

最新更新