寻求在 Mercurial 中实现涉及轻量级分支的工作流的 Git 用户通常是 pointed至 Mercurial bookmarks .简而言之,建议是维护多个与 git 分支对应的头,并用书签命名。
在这样的工作流程中,一个普遍的愿望是查看当前分支中自父分支(通常为 master
或另一个长生命周期分支)分支以来所做的所有提交的列表。在 git 中,这可以通过以下方式完成:
git log <master>..HEAD
哪里<master>
是父分支的名称。
我想知道,在带有书签的 Mercurial 中,这个命令的等效项是什么?
我正在寻找具有以下属性的命令:
- 它与上面的 git 命令在列出哪些修订以及以什么顺序(很明显)方面具有相同的语义。
- 与 git 命令一样,它不涉及键入当前“分支”(书签)的名称。
- 它不需要在当前“分支”与父“分支”的 fork 点存在书签。它可能需要存在一个指向父“分支”头部的书签——我们可以称这个书签为
master
。 . - 很短。我真的不想键入一个长的 revset 表达式,每次我想这样做时都必须用引号括起来。 (也就是说,我还没有找到任何 revset 表达式来满足我的需求,所以即使是很长的表达式也是进步。)
最佳答案
Git 日志手册页(带有指向 Git 修订版手册页的链接)定义范围规范如下:
<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>, .)
如果“范围”这个词对您来说太多了,您也可以使用一些特殊字符:
[revsetalias]
_($1)=reverse(ancestors(.)-ancestors($1))
生成的速记
hg log -r_(<bookmark>)
比
更短git log <bookmark>..HEAD
当然,无论如何这只是吹毛求疵。
关于git - 使用书签作为轻量级分支时 Hg 相当于 "git log master..HEAD"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18369971/