跳转到内容

理解 Darcs/撤销错误

来自维基教科书,开放世界开放书籍

有许多方法可以删除内容:remove、rollback、revert、obliterate、unpull、unrecord... 几乎让人觉得太多了。其中只有三个非常重要。按严重程度排列,它们分别是revert, unrecord, obliterate. 你也可以将它们视为对称表的一部分

近期 任务 反任务
最新 whatsnew
(例如:添加、删除、移动、编辑文件)
revert
近期 record unrecord
较早 pull unpull (又称 obliterate)

别太担心这张表。它迟早会变得有意义的。

无论如何,以下是对所有不同删除内容方法的简要比较。每个方法都有其用武之地,即使是那些奇怪的方法,比如rollback.

三大命令

[编辑 | 编辑源代码]

revert只删除新内容

[编辑 | 编辑源代码]
revert不小心编辑了一些内容?试试unrevert

这些命令中最简单的是 **revert**。revert 的作用就是删除你还没有记录的内容。你可以将 revert 视为 whatsnew 的“反面”。revert 删除的是新内容。

The darcs revert command
darcs revert 命令

unrecord使内容再次变为新内容

[编辑 | 编辑源代码]

**Unrecord** 与 revert 的作用完全不同。revert 删除的是新内容,而 unrecord 删除的是补丁,但重要的是,它会 *使补丁中的内容再次变为新内容*,以便你可以随意选择重新记录或撤销它。

只有当你记录了一些内容,然后意识到自己犯了错误,想要以不同的方式记录时才应该使用 unrecord(另请注意 amend-record)。注意:只有当你确定你的仓库是唯一包含该补丁的仓库时才应该使用 unrecord!

The darcs unrecord command
darcs unrecord 命令

请注意,上面的图片更准确地描述了 unrecord 的作用——它从原始树中删除了一个补丁及其相应的修改。内容再次变为新内容只是这个事实的自然结果。

obliterateunrecord + revert

[编辑 | 编辑源代码]

**Obliterate** 故意被命名为一个令人害怕的词。Obliterate 可以看作是 unrecord 一个补丁(从而使它的内容再次变为新内容),然后 revert 它。换句话说,obliterate 会完全删除一个补丁!通常情况下:你会使用 obliterate 回到很早之前的时间点。比如,“嗯,我过去三个月一直在做的那些东西都很愚蠢”。Obliterate 就是你的答案。

The darcs obliterate command
darcs obliterate 命令

其他删除内容的方法

[编辑 | 编辑源代码]

unpullobliterate

[编辑 | 编辑源代码]

**Unpull** 和 **obliterate** 是完全相同的命令,只是为了反映它在撤销 pull 操作中的用途而被命名为 unpull。

**Rollback** 不是你经常会用到的命令。情况是这样的。你想要删除一个补丁,但人们一直在告诉你,你不应该 obliterate 或 unrecord 已经在其他人仓库中的补丁。那么你该怎么办呢?一个解决方案是打开你的文本编辑器,做出与补丁中修改完全相反的修改(然后记录等等)。另一个解决方案是生成一个 rollback 补丁,它能做同样的事情。它会创建一个补丁,与另一个补丁的作用完全相反。

一些用户发现直接使用文本编辑器更容易。

remove不属于这里

[编辑 | 编辑源代码]

尽管它的名称是“删除内容”风格,remove实际上并不是一个撤销类命令。它的作用与add相反:它告诉 darcs 不再关注某个文件。但正如我们在上一章中提到的,大多数时候你甚至不需要darcs remove. 只需要告诉你的计算机删除工作目录中的文件就足够了,darcs 会注意到它不见了。

问题和异议

[编辑 | 编辑源代码]
  • 但是...但是...我只想回到两周前我的仓库的状态!
    • obliterate这可能是你想要做的。见上文。
下一页: 处理冲突 | 上一页: 回顾你的工作
主页: 理解 Darcs
华夏公益教科书