Как показать различия, специфичные для названной ветви в 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 diff -r <branchname_1>:<branchname_2>
показать последний коммит текущей ветки:
hg log -r .