Может ли hg log показывать только предки данной версии?

Одна вещь, которую я действительно пропускаю, переходя от svn к mercurial, заключается в том, что команда Mercurial hg log настаивает на том, чтобы показать всю историю, а не только историю моей текущей рабочей ревизии.

Например, я работаю над репо с большим количеством проверок для другой главы в моей ветке, а первые 20 записей журнала не имеют ничего общего с моей линией разработки.

В hg log есть множество опций, но... --rev показывает, что исправленная просьба, но не ее предки
-branch не работает, потому что активная головка находится в той же ветке, что и моя. --prune удаляет всех предков другой головы, даже если они также являются моими предками
--user не работает, потому что я не единственный пользователь в этой линии разработки

Я думаю, я мог бы полоса hg, но это похоже на перебор...

Мысли?
Райан

Ответы

Ответ 1

Если у вас Mercurial 1.6 или более поздняя версия, вы можете использовать revsets:

hg log --rev "ancestors(.)"
hg log --rev "reverse(ancestors(.))"  # Output in the same order as vanilla hg log

Ответ 2

Я знаю, что наборы изменений в наши дни все в ярости (hg log -r "::."), но малоизвестный флаг --follow позволяет вам делать то, что вы хотите, используя любую версию Mercurial. hg log help говорит (выделение выделено жирным шрифтом):

[...] Используйте -f/--follow с именем файла, чтобы следить за историей переименований и копии. --follow без имени файла будут отображаться только предки или потомки исходной версии. [...]

Если не указан диапазон версий, значение по умолчанию - подсказка: 0 , если --follow не является set, и в этом случае родитель рабочей директории используется как стартовый ревизия. [...]

Итак, другими словами, добавление -f сделает трюк для вас. Вы можете добавить -f к своим значениям по умолчанию:

[defaults]
log = -f

или еще лучше, вы можете создать псевдоним для этого:

[alias]
logf = log -f

Это позволяет избежать изменения основной команды типа hg log, которая рано или поздно будет путать вас или ваших коллег.

Ответ 3

Как сказал Niall C, вы можете сделать это из командной строки с помощью revsets:

hg log --rev "ancestors(.)"

Кроме того, если у вас есть TortoiseHg, вы можете отфильтровать график ревизий в проводнике репозитория с помощью переключателей с надписью "Все", "Tagged", "Ancestry", "Parents", "Heads", "Merges" и т.д. чуть выше вашей истории. В этом случае вы выберете версию, чье происхождение вас интересует, а затем выберите опцию "Ancestry".