Как показать 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?
Ответы
Ответ 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 .