Mercurial 的设计根本不包括暂存区的概念。即本地修改和提交之间没有中间状态。
以下是您提到的每个概念的概述:
hg graft
相当于git cherry-pick
。它将提交从一个分支复制到另一个分支。此功能的典型用例是将错误修复从一个发布分支复制到另一个。此命令替换旧的(现在已过时的)hg transplant
扩展。
hg record
并且hg qrecord
类似于git add --patch
。它们允许您以交互方式选择要提交的块。因此,如果您修改了一个文件的多个不同区域,您可以选择您实际想要提交的区域(即大块)以及您想要保留哪些区域作为本地修改。
qrecord
仅当您mq
启用时才可用。它提交mq
补丁而不是标准提交。
hg shelve
类似于git stash
。它允许您暂时搁置对文件(或文件大块)的本地修改。这些修改可以unshelved
在您准备好时进行。
dirstate
是 Mercurial 源代码的内部类。它不会暴露给用户。
Mercurial Queues
(也称为mq
)可能是您最接近 Mercurial 暂存区的位置。以下是 Mercurial wiki 的描述:
更改作为提交到 Mercurial 的补丁进行维护。可以删除或重新排序提交,并且可以根据工作目录中所做的更改刷新底层补丁。补丁目录也可以置于版本控制之下,因此您可以拥有对补丁所做更改的单独历史记录。
mq
通常用于完善/返工您在本地测试但尚未推送到公共位置的提交。有些人还使用它来维护对 3rd 方代码的一组修改。