Git用户寻求在Mercurial中实现涉及轻量级分支的工作流程,通常是pointed到Mercurial bookmarks。简而言之,建议维护与git分支对应的多个头,并用书签命名。
此类工作流程的一个共同愿望是查看当前分支中所有提交的列表,因为它是从父分支(通常为master
或另一个长期分支)分支的。在git中,这可以通过以下方式完成:
git log <master>..HEAD
其中<master>
是父分支的名称。
我想知道,Mercurial中这个带书签的命令相当于什么?
我正在寻找具有以下属性的命令:
master
。答案 0 :(得分:6)
Git log man-page(带有Git revisions man-page的链接)定义了如下范围规范:
<rev1>..<rev2>
Include commits that are reachable from <rev2> but exclude those that are reachable from <rev1>.
它还说关于订单:
By default, the commits are shown in reverse chronological order.
鉴于此规范,Mercurial revset
reverse(ancestors(.)-ancestors(<bookmark>))
应该足够了。
仔细看看,这个revset实际上遵循了规范。它以相反的顺序显示从当前工作副本的父级可以访问的提交,但不包括从给定书签可访问的提交(在您的情况下为“master”)。我认为Git的语法是这个规范的简写。您可以使用所谓的revset别名在Mercurial中执行相同的操作(创建快捷方式)。
将以下行放入.hgrc:
[revsetalias]
range($1)=reverse(ancestors(.)-ancestors($1))
将使您能够使用它:
hg log -r range(<bookmark>)
如果你想让它更灵活,你可以在.hgrc:
中定义它[revsetalias]
range($1,$2)=reverse(ancestors($2)-ancestors($1))
并使用以下内容获取HEAD示例:
hg log -r range(<bookmark>, .)
如果单词“range”太多而无法为您输入,您也可以使用一些特殊字符:
[revsetalias]
_($1)=reverse(ancestors(.)-ancestors($1))
结果简写
hg log -r_(<bookmark>)
甚至比
更短git log <bookmark>..HEAD
但当然,这只是挑剔,无论如何。