【问题标题】:Difference between Revert and Update in MercurialMercurial中恢复和更新之间的区别
【发布时间】:2011-01-31 04:45:03
【问题描述】:

我刚开始使用 Mercurial,遇到了一些我不明白的事情。

我对几个文件进行了更改,现在我想撤消我对其中一个文件所做的所有更改(即返回我对一个特定文件的上一次提交)。

据我所知,我想要的命令是revert

在我链接的页面中,有如下语句:

但此操作不会改变 工作的父版本 目录(或修订的情况下 未提交的合并)。撤消一个 未提交的合并,您可以使用“hg update -C -r." 这将重置 父母到第一个父母。

我不明白两者之间的区别(hg reverthg update -C -r)。谁能告诉我区别?就我而言,我真的希望恢复或更新摆脱我对文件所做的更改吗?

【问题讨论】:

  • 要真正看到差异,您应该尝试使用revert -r,然后使用hg status,您会看到差异:)

标签: version-control mercurial


【解决方案1】:

第一个区别是 revert 可以在工作副本的一个子集上工作,而 update 可以在整个工作副本上工作。另一个不同之处在于当您想要返回到上次提交的版本以外的版本时会发生什么。

如果我们有修订(大写已提交,小写是工作副本中的更改,父修订是 C )

A-B-C-d

update -C -r B会给你

A-B-C

将您的工作副本设置为 B,任何更改都将导致从 B 分支(父修订设置为 B)

A-B-C
  \e

revert -r B会给你

A-B-C-b'

其中 b' 是一组更改,它撤消了中间提交更改中的所有内容,在这种情况下,它撤消了所有 C。任何更改现在只需加入 b' 集(父修订在 C 处保持不变)

【讨论】:

  • 您对如何恢复/更新到最新版本以外的版本的解释非常好。让我补充一下,帮助中提到这种区别的句子是“不更改工作目录的父修订版”。在 jk 的示例中,“工作目录的父版本”以 C 开头。随着更新,它以 B 结束,而随着恢复,它仍然是 C(“不改变”)。无论哪种情况,都可以使用“hg parents”查看。此外,“还原可以在工作副本的一个子集上工作”来自此 - 只有一个工作目录父级,所有文件共享它。
  • 很酷,一个经常被问到的问题的好答案。
  • 谢谢,很好的回答。只是一个澄清:你写(最后一行)“会给你ABC-b',其中b'是一组更改,它撤消中间提交的更改中的所有内容,在这种情况下它撤消所有C。任何更改现在只需加入b' 集(父版本在 C 处保持不变)”。如果我理解正确,你只剩下一个包含 B 修订版的工作目录,但你的父级是 C,所以如果你现在提交,你基本上会有一个树是“ABC-B'”(其中 B'与 B) 完全相同。换句话说,直到 B' 的历史记录保持不变?
  • 是的,mercurial 通常不允许您更改历史记录,因此要恢复到以前的变更集,您有一个新的变更集,它会撤消所有内容。因此工作副本看起来相同(都像 B),但 B 变更集与 B' 变更集不同
  • 当然更新不会改变已经发生的分支的历史,它只是允许你开始一个新的历史分支,有点
猜你喜欢
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
  • 2015-01-15
  • 2014-08-16
  • 2011-04-08
  • 2012-11-24
  • 2013-06-05
  • 2021-09-29
相关资源
最近更新 更多