帮助:修订

指定修订

Mercurial支持多种指定修订的方法。

指定单个修订

普通整数被视为修订号。负整数是视为距尖端的连续偏移,-1表示尖端,-2表示提示之前的修订,以此类推。

40位十六进制字符串被视为唯一的修订标识符。长度小于40个字符的十六进制字符串被视为唯一的修订标识符,称为缩写标识符。只有当短格式标识符是前缀时,它才有效只有一个全长标识符。

任何其他字符串都被视为书签、标记或分支名称。A类书签是指向修订的可移动指针。标签是一个永久名称与修订关联。分支名称表示最开放的分支头或者,如果它们都关闭了分支。书签、标记和分支名称不得包含“:”字符。

保留名称“tip”始终标识最新的修订。

保留名称“null”表示修订为null。这是空存储库的版本,以及版本0的父版本。

保留名称“.”表示工作目录父目录。如果没有工作目录已签出,它相当于null。如果未提交合并正在进行中,“.”是第一个起源。

最后,需要单个修订的命令(如“hg update”)也接受revsets(有关详细信息,请参阅下文)。当给定一个revset时,他们使用修订集的最新版本。一些命令接受两个单独的修订(如“hg diff”)。当给定一个revset时,他们使用第一个和最后一个修订版本。

指定多个修订

Mercurial支持一种用于选择一组修订。这种语言中的表达式称为revset。

该语言支持许多由中缀连接的谓词操作员。括号可用于分组。

诸如分支名称之类的标识符可能需要用单引号或如果包含“-”之类的字符或匹配,则使用双引号预定义谓词之一。

通过转义特殊字符,可以在引用的标识符中使用它们,例如,“\n”被解释为换行符。为了防止他们解释后,字符串可以加上前缀“r”,例如“r'…'”。

操作员

只有一个前缀运算符:

“不是x”
变更集不在x中。缩写为“!x”。

以下是受支持的中缀运算符:

“x::y”
DAG范围,表示x的后代和y的祖先的所有变更集,包括x和y本身。如果省略第一个端点,这相当于“祖先(y)”,如果省略第二个端点,则相当于“后代(x)”。

另一种语法是“x.y”。

“x:y”
修订号介于x和y之间的所有变更集(包括x和y)。任意端点都可以省略,它们默认为0和tip。
“x和y”
x和y中变更集的交集。缩写为“x&y”。
“x或y”
x和y中变更集的并集。有两种可选的缩写形式:“x|y”和“x+y”。
“x-y”
x中有变更集,但y中没有。
“x%y”
是x的祖先但不是y的祖先(即::x-::y)的变更集。这是“仅(x,y)”的简写符号(见下文)。第二个参数是可选的,如果省略,则相当于“仅(x)”。
“x^n”
x的第n个父级,n==0、1或2。对于n==0,x;对于n=1,x中每个变更集的第一个父级;对于n=2,x中变更集的第二个父级。
“x~n”
x的第n个第一祖先;“x~0”是x;“x~3”是“x^^^”。对于n<0,x的第n个明确的后代。
“x##y”
将字符串和标识符连接为一个字符串。

所有其他前缀、中缀和后缀操作符的优先级低于"##". 例如,“a1##a2~2”等同于“(a1##a2)~2”。

例如:

[修订别名]问题(a1)=grep(r'\bissue[:]?'#a1#r'\b|\bbug\('#a1#r'\)')

“issue(1234)”相当于“grep(r'\bissue[:]?1234\b|\bbug\(1234\)')”在这种情况下。这与所有“问题1234”、“问题:1234”,“issue1234”和“bug(1234)”。

只有一个后缀操作符:

“x^”
相当于x中每个变更集的第一个父级“x^1”。

模式

注意,执行字符串匹配的谓词可以接受模式字符串。模式可以是文本,也可以是正则表达式。如果模式以“re:”开头,模式的其余部分被视为正则表达式。否则,它被视为文字。匹配图案它实际上以“re:”开头,使用前缀“literal:”。

除非另有说明,匹配是区分大小写的。执行案例-对区分大小写的谓词进行不敏感匹配,请使用正则表达式,前缀为“(?i)”。

例如,“tag(r're:(?i)release')”匹配“release”或“release”或“发布”等。

谓词

支持以下谓词:

“添加(模式)”
添加文件匹配模式的变更集。

没有像“glob:”这样的显式类型的模式应该是相对于当前目录,并与文件或目录。

“all()”
所有变更集,与“0:tip”相同。
“所有前置任务(集)”
集合中变更集的可传递前身。
“所有继任者(集)”
集合中变更集的可传递继承者。
“祖先(*变更集)”
变更集的最大共同祖先。

接受0个或多个变更集。当没有传递参数时,将返回空列表。单个变更集最大的共同祖先是该变更集。

“祖先(集合[,深度])”
集合中变更集的祖先变更集,包括给定的变更集本身。

如果指定了深度,则结果只包括最大为的变更集指定的代。

“作者(字符串)”
“user(string)”的别名。
“平分(字符串)”
标记为指定平分状态的变更集:
  • “good”、“bad”、“skip”:c明确标记为good/bad/skip的集合
  • “货物”、“坏”:c设置拓扑上的好/坏
  • “范围”:c参与平分的集合
  • “修剪过的”:c货物、不良或跳过的集合
  • “未测试”:命运未知的集
  • “忽略”:cs由于DAG拓扑而忽略的集合
  • “current”:当前被平分的cset
“书签([名称])”
命名书签或所有书签。

“name”支持模式匹配。请参阅“hg help revisions.patterns”。

“分支(字符串或集合)”
属于给定分支或给定变更集分支的所有变更集。

“string”支持模式匹配。请参见“hg help revisions.patterns”。

“分支点()”
具有多个子级的变更集。
“捆绑()”
捆绑包中的变更集。

捆绑包必须由-R选项指定。

“儿童(套)”
集合中变更集的子变更集。
“关闭()”
变更集已关闭。
“共同祖先(集合)”
是集合中每个变更集的祖先的变更集。
“conflictlocal()”
合并的本地端(如果当前处于未解析的合并中)。

这里的“merge”包括来自例如“hg rebase”或“hg graph”的合并冲突。

“conflictother()”
合并的另一侧(如果当前处于未解析的合并中)。

这里的“merge”包括来自例如“hg rebase”或“hg graph”的合并冲突。

“包含(模式)”
修订版的清单包含一个文件匹配模式(但可能不会修改它)。有关文件模式的信息,请参阅“hg help patterns”。

没有像“glob:”这样的显式类型的模式应该是相对于当前目录并与文件精确匹配提高效率。

“contentdifferent()”
变更集的最终继承者与最终继承者的替代集。(实验)
“已转换([id])”
从旧存储库中的给定标识符转换的变更集(如果存在),或者如果未指定标识符,则转换所有转换的变更集中。
“日期(间隔)”
间隔内的变更集,请参阅“hg帮助日期”。
“描述(字符串)”
在提交消息中搜索字符串。匹配项区分大小写。

“string”支持模式匹配。请参见“hg help revisions.patterns”。

“后代(集合[,深度])”
变更集是集合中变更集的后代,包括给定的变更集本身。

如果指定了深度,则结果只包括最大为的变更集指定的代。

“目的地([集])”
通过移植、移植或重设基操作创建的变更集,将给定的修订指定为源。省略可选集与传递all()相同。
“diffcontains(模式)”
搜索添加或删除模式时的修订差异。

该模式可以是子字符串文字或正则表达式。请参见“hg帮助修订版。模式”。

“草稿()”
草稿阶段的变更集。
“预期大小(集合[,大小])”
如果大小与revset大小匹配,则返回给定的revset。如果revset不期望给定大小,则中止。大小可以是整数范围或整数。

例如,当revset大小为2且2不在3和5之间(含3和5)。

“extdata(源)”
指定的外部数据源中的变更集。(实验)
“extinct()”
仅具有过时子代的过时变更集。(实验)
“额外(标签,[值])”
额外元数据中具有给定标签的变更集,以及给定的可选值。

“value”支持模式匹配。请参见“hg help revisions.patterns”。

“文件(图案)”
影响模式匹配的文件的变更集。

要获得更快但不太准确的结果,请考虑使用“filelog()”而不是。

该谓词使用“glob:”作为默认类型的模式。

“文件日志(模式)”
连接到指定文件日志的变更集。

出于性能原因,只访问文件级别中提到的修订文件日志,而不是筛选所有变更集(速度更快,但不包括删除或重复更改)。为了更慢、更准确结果,使用“file()”。

没有像“glob:”这样的显式类型的模式应该是相对于当前目录并与文件精确匹配提高效率。

“第一个(集合,[n])”
limit()的别名。
“关注([file[,startrev]])”
“::.”(工作目录第一个父目录的祖先)的别名。如果指定了文件模式,则会遵循startrev给定版本中与给定模式匹配的文件历史记录,包括副本。
“以下行(file,fromline:toline[,startrev=.,descense=False])”
修改行范围中的“file”的变更集(“fromline”、“toline”)。

行范围对应于“startrev”处的“file”内容,因此应为与文件大小一致。如果未指定startrev,则工作目录使用父级。

默认情况下,返回“startrev”的祖先。如果“下降”为True,虽然重命名(当前)没有返回“startrev”的后代沿着这个方向。

“grep(regex)”
类似于“keyword(string)”,但接受正则表达式。使用“grep(r'…')”确保正确处理特殊转义字符。与“关键字(字符串)”不同,匹配区分大小写。
“头部()”
变更集是一个命名的分支头。
“头(套)”
集合中没有子集合的成员。
“隐藏()”
隐藏的变更集。
“id(字符串)”
由给定的十六进制字符串前缀明确指定的修订。
“关键字(字符串)”
在提交消息、用户名和已更改文件的名称中搜索字符串。匹配区分大小写。

对于这些字段的正则表达式或区分大小写的搜索,请使用“grep(regex)”。

“最后(集,[n])”
集合的最后n个成员,默认为1。
“限制(设置[,n[,偏移量]])”
集合的前n个成员,默认为1,从偏移量开始。
“匹配(版本[,字段])”
给定字段集与所选修订或集中的字段集匹配的变更集。

要匹配多个字段,请将要匹配的字段列表分隔通过空格(例如“作者描述”)。

有效字段是最常见的修订字段和一些特殊字段。

常规修订字段为“description”、“author”、“branch”、,“日期”、“文件”、“阶段”、“父项”、“子状态”、“用户”和“diff”。请注意,“author”和“user”是同义词。“diff”指的是修订内容。与“差异”匹配的两个修订版将也匹配他们的“文件”。

特殊字段为“摘要”和“元数据”:“summary”与描述的第一行匹配。“metadata”等同于匹配“description user date”(即与主要元数据字段匹配)。

“metadata”是在没有字段时使用的默认字段明确规定。一次可以匹配多个字段。

“最大(台)”
集合中修订号最高的变更集。
“合并()”
变更集是合并变更集。
“最小(设置)”
集合中修订号最低的变更集。
“修改(图案)”
更改集修改模式匹配的文件。

没有像“glob:”这样的显式类型的模式应该是相对于当前目录并与文件或目录。

“命名(命名空间)”
给定命名空间中的变更集。

“namespace”支持模式匹配。请参见“hg help revisions.patterns”。

“节点文件(路径)”
从位于“path”的文件中读取节点列表。

这会将“id(LINE)”应用于文件的每一行。

当需要指定的节点数量过大时,这很有用用于命令行。

“无()”
没有变更集。
“过时()”
具有更新版本的可变变更集。(实验)
“仅(集合,[集合])”
是第一个集合的祖先而不是回购中任何其他头部的祖先的变更集。如果指定了第二个集合,则结果是第一个集合的祖先不是第二个集的祖先(即:<set1>-::<set2>)。
“原点([set])”
被指定为创建给定修订的移植物、移植或再基础的来源的变更集。省略可选集与传递all()相同。如果由这些操作创建的变更集本身被指定为这些操作之一的源,则只选择第一个操作的源变更集。
“孤儿()”
具有过时祖先的非完全变更集。(实验)
“传出([路径])”
在指定的目标存储库或默认推送位置中找不到变更集。

如果位置解析为多个存储库将使用传出变更集。

“p1([设置])”
集合或工作目录中变更集的第一个父级。
“p2([集])”
集合或工作目录中变更集的第二个父级。
“家长([组])”
集合或工作目录中所有变更集的所有父级的集合。
“相位发散()”
标记为公共变更集继承者的可变变更集。

只有非公共的和非过时的变更集才能是“相位发散的”。(实验)

“前置任务(集)”
集合中变更集的直接前身。
“存在(套)”
如果在集合中找不到任何修订,则为空集合;否则,所有修订都在集合中。

如果本地存储库中不存在任何指定的修订,查询通常被中止。但是这个谓词允许查询即使在这种情况下也要继续。

“public()”
公共阶段的变更集。
“远程([id[,path]])”
与远程存储库中给定标识符相对应的本地修订版(如果存在)。这里是“.”identifier是当前本地分支的同义词。
“删除(图案)”
删除与模式匹配的文件的变更集。

没有像“glob:”这样的显式类型的模式应该是相对于当前目录并与文件或目录。

“修订版(编号)”
具有给定数字标识符的修订。
“反向(设置)”
集合的相反顺序。
“revset(设置)”
将内容严格解释为revset。

这个特殊谓词的内容将被严格解释为重新设定。例如,“revset(id(0))”将被解释为“id(0”没有“id(0)”书签或标记可能的歧义。

“根(集)”
集中的变更集没有父变更集。
“secret()”
变更集处于秘密阶段。
“排序(设置[,[-]键…[,…]])”
按键对设置进行排序。默认的排序顺序是升序,将键指定为“-key”以按降序排序。

这些键可以是:

  • “rev”表示修订号,
  • “branch”代表分支名称,
  • “desc”表示提交消息(描述),
  • “user”代表用户名(“author”可用作别名),
  • 提交日期的“日期”
  • “topo”表示反向地形排序
  • “节点”修订的节点ID
  • “随机”随机洗牌修订

“拓扑”排序顺序不能与其他排序键组合。这种接受一个可选参数“topo.firstbranch”,它接受一个revset指定排序中要优先排序的地形分支。

“random”排序需要一个可选的“random.seed”参数来控制结果的伪随机性。

“堆栈([revs])”
变更集堆栈或工作目录父级的实验性版本集。(实验)
“子回购([模式])”
添加、修改或删除给定子报告的变更集。如果没有命名子回购模式,则返回所有子回购更改。
“继任者(组)”
集合中变更集的直接继承者。
“已暂停()”
具有非过时子代的过时变更集。
“标签([名称])”
按名称指定标记,如果未指定名称,则为所有标记的修订。

“name”支持模式匹配。请参见“hg help revisions.patterns”。

“不稳定()”
具有不稳定性的变更集。
“用户(字符串)”
用户名包含字符串。匹配项区分大小写。

“string”支持模式匹配。请参见“hg help revisions.patterns”。

“wdir()”
工作目录。(实验)

别名

可以使用以下任意组合定义新谓词(称为“别名”)现有谓词或其他别名。别名定义如下:

<别名>=<定义>

在Mercurial配置文件的“revsetalias”部分。论据将“a1”、“a2”等形式的从别名替换为定义。

例如,

[修订别名]h=封头()d(s)=排序,日期rs(s,k)=反向(排序(s,k))

定义了三个别名“h”、“d”和“rs”。“rs(0:tip,author)”是完全等同于“reverse(sort(0:tip,author)”。

等价物

“hg log”的等效命令行:

-f->::。-d x->日期(x)-k x->关键字(x)-m->合并()-u x->用户(x)-b x->分支(x)-P x->!::x个-l x->极限(expr,x)

示例

一些示例查询:

  • 默认分支上的变更集:
    hg log-r“分支(默认)”
  • 自标记1.5以来默认分支上的变更集(不包括合并):
    hg log-r“分支(默认)和1.5::and not merge()”
  • 打开分支头:
    hg log-r“头()和未关闭()”
  • 标签1.3和1.5之间的变更集提到了影响“hgext/*”的“bug”:
    hg log-r“1.3::1.5和关键字(bug)和文件('hgext/*')”
  • 2008年5月提交的变更集,按用户排序:
    hg log-r“排序(日期('May 2008'),用户)”
  • 提及“bug”或“issue”的变更集不在标记的版本中:
    hg log-r“(关键字(bug)或关键字(issue))而不是祖先(tag())”
  • 更新书签@指向的提交,而不激活书签(这是因为使用了最新版本的revset):
    hg更新:@
  • 显示标记1.3和1.5之间的差异(这是因为使用了版本集的第一个和最后一个修订版):
    汞压差-r 1.3::1.5