经常使用 Git 的同学,大概会知道我们可以使用 git checkout 分支 文件 命令,把另一个版本中的文件复制到当前工作目录。那么,在 Mercurial (hg) 下,我们如何实现类似操作呢?

这里我要吐槽一下 Git 的命令行,很多时候真的是故意让人困惑。就譬如这个 git checkout 命令吧,它的功能取决于它的参数,不同的参数会导致 git checkout 执行完全不同的操作。

首先,git checkout 分支 这个命令会切换到指定的分支。在 Mercurial(hg)中,你可以使用 hg update 书签 来达到相同的效果。顺便说一句,虽然 Mercurial (hg) 也有「分支」的概念,但它和 Git 里的分支是完全不一样的,和 Git 的分支等价的概念在 Mercurial 里叫「书签」。具体详情可以看这篇文章

其次,git checkout -b 分支 这个命令会创建一个新的分支,并立即切换到这个新分支。在 Mercurial (hg) 中,你可以使用 hg bookmark 书签 来创建一个新的书签。

然后就是我们今天要讨论的主要内容:git checkout 分支 文件 这个命令会将指定的文件恢复到它在指定分支中的状态,且不会切换分支。在 Mercurial (hg) 中,你可以使用 hg revert -r 提交 文件 来达到相同的效果。

Git 的设计理念中,同一个命令可以执行多个不同且不相关的功能,这给用户带来了一定的困惑。这种设计可能会增加用户的学习成本,因为他们需要理解和记住每个命令在不同上下文中的不同行为。相比之下,Mercurial (hg) 的接口设计更加直观和一致,每个命令都有其明确的功能,这使得用户能够更容易地理解和使用。这也是为什么很多 Mercurial (hg) 的宣传语会强调「similar functionality with sane interface」。