Я пытаюсь привыкнуть делать обзоры кода, но слияния делали процесс трудным, потому что я не знаю, как попросить Подвижный "показывать только изменения, представленные слиянием, которые не присутствовали ни в одном из его родителей".
Или, немного более официально (благодаря Steve Losh):
Покажите мне каждый ломоть в слиянии, которое не присутствовало ни в одном из его родителей, и покажите мне каждый ломоть, существующий в любом из его родителей, который также не присутствует в 3.
Например, предположите, что у меня есть репозиторий с двумя файлами, a и b. Если "a" изменяется в пересмотре 1, "b" изменяется в пересмотре 2 (который находится на отдельном ответвлении), и эти два изменения объединяются в пересмотре 3, я получу историю, которая похожа на это:
@ changeset: 3 |\ summary: Merged. | | | o changeset: 2 | | summary: Changing b | | o | changeset: 1 |/ summary: Changing a | o changeset: 0 summary: Adding a and b
Но если я прошу видеть изменения, представленные пересмотром 3, hg di -c 3
, Подвижный покажет мне то же самое, как будто я попросил видеть изменения, представленные в пересмотре 1, hg di -c 1
:
$ hg di -c 3 --- a/a +++ b/a @@ -1,1 +1,1 @@ -a +Change to a $ hg di -c 1 --- a/a +++ b/a @@ -1,1 +1,1 @@ -a +Change to a
Но, очевидно, это не очень полезно - вместо этого, я хотел бы быть сказанным, что никакие новые изменения не были представлены пересмотром 3 (или, если бы был конфликт во время слияния, то я хотел бы видеть только разрешение к тому конфликту). Что-то как:
$ hg di -c 3 $
Так, как я могу сделать это?
PS: Я знаю, что могу сократить количество слияний в моем использовании репозитория rebase
…, Но это не моя проблема - моя проблема выясняет то, что было изменено со слиянием.
Краткий ответ: вы не можете сделать это с помощью стандартной команды Mercurial.
Выполнение hg diff -c 3
покажет вам изменения между 3
и его первым родителем, то есть набором изменений, который вы использовали, когда запускали hg merge
.
Это имеет смысл, если вы думаете о ветвях как о большем количестве чем просто набор изменений. Когда вы запускаете hg up 1 && hg merge 2
, вы говорите Mercurial: «Слить ревизию 2
в ревизию 1
».
Это более очевидно, если ты' повторно используют именованные ветви. Скажем, набор изменений 2
в вашем примере находился в именованной ветке с именем rewrite-ui
. Когда вы запускаете hg update 1 && hg merge rewrite-ui
, вы фактически говорите: «Объедините все изменения в ветке rewrite-ui
в текущую ветку». Когда вы позже запустите hg diff -c
в этом наборе изменений, он покажет вам все, что было введено в ветку по умолчанию
(или любую другую ветвь 1
, которая находится в) путем слияния, что имеет смысл.
Однако из вашего вопроса похоже, что вы ищете способ сказать:
Покажите мне каждый кусок в этом наборе изменений, которого не было ни в одном из его родителей , и покажите мне каждый кусок, присутствующий в любом из его родителей, который не t также присутствует в
3
.
Это непросто вычислить (я даже не уверен, что получил описание прямо сейчас). Я определенно вижу, насколько это было бы полезно, поэтому, если вы можете определить это однозначно, вы можете убедить одного из участников Mercurial, читающих SO, реализовать его.