Как показать различия, специфичные для названной ветви в Mercurial

Предполагая, что у меня есть именованная ветка foo с двумя коммитами a, b:

      a       b       c  
------o-------o-------o------- # default
       \          d         e
        ----------o---------o  # branch foo

Я хочу увидеть разницу между а и е (не включены). Конечно, я мог бы использовать идентификатор ревизии, но это не очень практично. В git можно сделать git diff master..foo. Как я могу сделать то же самое в HG?

4 ответа

Решение

Вы можете сделать это, используя revsets.

В вашем конкретном примере я думаю, что вы могли бы получить список только d а также e с помощью:

hg log -r "branch('foo') - branch('default')"

где это - определяется как:

"x - y"
      Changesets in x but not in y.

Получить diff из a в e можно следующим образом:

hg diff -r "ancestor(default, foo)" -r foo

хотя, возможно, есть сокращение для этого я не вижу.

Другой способ сделать это, полезный также для веток, которые вы уже слили с настройками по умолчанию:

hg diff -r "max(ancestors(foo) and branch(default)):foo"

Хотя это может быть проблемой, поэтому я бы порекомендовал создать псевдоним, добавив что-то вроде:

[alias]
branchdiff = diff -r "max(ancestors('$1') and branch(default)):'$1'"

На ваш Mercurial.INI/hgrc, который вы затем можете использовать следующим образом:

hg branchdiff <branch name>

или же

hg branchdiff .

Если вы хотите журналы только из текущей ветки:

hg log -b.

Разница между ветками:

hg diff -r <branchname_1>:<branchname_2>

показать последний коммит текущей ветки:

hg log -r .

Другие вопросы по тегам