git - 使用书签作为轻量级分支时 Hg 相当于 "git log master..HEAD"?

标签 git version-control mercurial branch

寻求在 Mercurial 中实现涉及轻量级分支的工作流的 Git 用户通常是 pointedMercurial 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/

相关文章:

mercurial - 在不同的分支上使用 Mercurial

git - 将 ".git"移动到父目录有任何副作用吗?

git - 我怎样才能忽略除 git 中具有特定扩展名的文件之外的所有文件?

svn - 对于一个团队来说,使用像 Mercurial 这样的分布式源代码控制是否值得?

version-control - PowerBuilder 11.5 和版本控制

mercurial - 在Mercurial中,我可以在两个分支之间仅 merge 一些文件吗? [复制]

git - 您如何修复错误的 merge ,并将您的良好提交重播到固定的 merge 中?

django - 如何从公共(public)存储库中排除南方迁移?

git - 在代码管理方面,TFS 比 GIT 好吗?

mercurial - 如何防止 mercurial 推送子存储库?