汞当量;git log master..HEAD“;当使用书签作为轻量级分支时?

汞当量;git log master..HEAD“;当使用书签作为轻量级分支时?,git,version-control,mercurial,branch,Git,Version Control,Mercurial,Branch,在Mercurial中寻求实现涉及轻量级分支的工作流的Git用户通常会被拒绝。简而言之,建议维护多个与git分支相对应的head,并用书签命名它们 这种工作流中的一个常见需求是查看自当前分支从父分支(通常为master或另一个长期分支)分支以来在当前分支中进行的所有提交的列表。在git中,这可以通过以下方式实现: git log <master>..HEAD git log..HEAD 其中是父分支的名称 我想知道,在Mercurial中,这个带有书签的命令的等价物是什么 我正在

在Mercurial中寻求实现涉及轻量级分支的工作流的Git用户通常会被拒绝。简而言之,建议维护多个与git分支相对应的head,并用书签命名它们

这种工作流中的一个常见需求是查看自当前分支从父分支(通常为
master
或另一个长期分支)分支以来在当前分支中进行的所有提交的列表。在git中,这可以通过以下方式实现:

git log <master>..HEAD
git log..HEAD
其中
是父分支的名称

我想知道,在Mercurial中,这个带有书签的命令的等价物是什么

我正在寻找具有以下属性的命令:

  • 它与上面的git命令具有相同的语义,它列出了哪些修订以及以什么顺序列出(显然)
  • 与git命令一样,它不涉及输入当前“分支”(bookmark)的名称
  • 它不需要在当前“分支”与父“分支”偏离的点上存在书签。它可能需要存在一个指向父“分支”头部的书签-我们可以称此书签为
    master
  • 它很短。我真的不想每次都键入一个长的revset表达式,它必须用引号括起来。(这就是说,我还没有找到任何能满足我需求的revset表达式,所以即使是长的表达式也将是进步。)
Git日志手册页(带有指向Git修订版手册页的链接)定义了如下范围规范:

<rev1>..<rev2>

   Include commits that are reachable from <rev2> but exclude those that are reachable from <rev1>.
根据此规范,Mercurial revset

reverse(ancestors(.)-ancestors(<bookmark>))
将使您能够使用以下功能:

hg log -r range(<bookmark>)
并使用以下内容获取头部示例:

hg log -r range(<bookmark>, .)
由此产生的速记

hg log -r_(<bookmark>)
hg日志-r_389;()
甚至比

git log <bookmark>..HEAD
git log..HEAD

但这当然只是吹毛求疵而已。

如果使用revset,revset的中缀运算符将比谓词i更好。e<代码>“x::y”或
“x:y”
(取决于条件:DAG或修订号范围),但这些不会产生OP想要的结果。x:y显示DAG范围,x:y显示按时间顺序排列的范围。尽管x..y在Mercurial中是x::y的有效快捷方式,但它并不像Git的x..y那样做,正如我在Git手册页的回答中所引用的那样。它做的是相同的设置。排序顺序是另一个问题,下一个问题Mercurial的x..y与Git的x..y做的事情不同。如果您有两个拓扑分支A和B在某个共同的祖先点C处分叉,Mercurial的x..y将不会为A..B显示任何内容,而Git的A..B将显示您提交了B-C,C'是B侧C的直接子级。@Lazybacker:在所讨论的情况下,
master
是父级“分支”头部的书签,它可能不是当前头的祖先。您能显示(部分)Git的DAG并标记与
Git log.头相关的部分历史吗?假设我对Git一无所知
hg log -r range(<bookmark>, .)
[revsetalias] 
_($1)=reverse(ancestors(.)-ancestors($1))
hg log -r_(<bookmark>)
git log <bookmark>..HEAD