Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Вы можете сделать это, используя 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

хотя, возможно, сокращение, которое я не вижу.

Ответ 2

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

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 .

Ответ 3

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

hg log -b.

Ответ 4

diff между ветвями:

hg diff -r <branchname_1>:<branchname_2>

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

hg log -r .