mercurial - увидеть изменения в ветке, игнорируя все коммиты слияния

У меня есть ветка, которая была разработана в течение длительного периода времени. Во время разработки ветка по умолчанию была объединена в эту ветку несколько раз. Теперь я хотел бы рассмотреть все изменения, внесенные в эту ветку, игнорируя слияния, чтобы решить, безопасно ли слить ее с настройками по умолчанию.

Я пытался

hg diff -r "branch('myBranch') - merge()"

но он все еще показывает изменения, внесенные слиянием. Также пытался следовать этомуКак показать diff, специфичный для названной ветви в Mercurial но

hg diff -r "branch('myBranch') - branch('default')"

по-прежнему вносить изменения, внесенные путем слияния.

Ответы на вопрос(4)

Следующее используетlog команда, но с--patch Параметр также может отображать измененные строки:

hg log --branch my-branch --no-merges --patch

Краткая форма:

hg log -Mpb my-branch

имеют читать оrevsets синтаксис

Ваш случай

hg log -r "branch('myBranch') and ! merge()"

 icabod02 янв. 2013 г., 14:27
Моя формальная логика не велика, но в этом случае неx - y а такжеx and !y дать тот же результат? Что-нибудь вmyBranch это тоже не слияние?
 Lazy Badger24 дек. 2012 г., 12:20
@Swiety 1)log а такжеdiff разные команды,ПОЛНОСТЬЮ РАЗНЫЕ КОМАНДЫ 2) Когда я написалlog - Я написалlogпотому что вы должны получитьсписок изменений и проверить измененияв каждой ревизии в наборе (Больше чем один diff, diff -c для каждой ревизии в набореlog) 3) РТФМ "Формальная логика":x - y знак равноx and !y !!!(Изменения в x, но не в y)! = (Изменения в x, а не в y) - обратно в школу
 Swiety24 дек. 2012 г., 08:28
Спасибо @ lazy-badger, но я боюсь, что выдача не отличается отhg diff -r "branch('myBranch') - merge()" Я все еще вижу изменения, внесенные слиянием. Кстати, вы имели в видуhg diff -r "branch('myBranch') and ! merge()"не так ли?

на который я долго пытаюсь найти хороший ответ, но пока не нашел хорошего. Хорошо, одна вещь, которая работает на 100%, это:

hg status     # make sure that you don't have local changes
hg up <target_branch>
hg merge <your branch>
hg diff > merge.diff
hg up -C  # this one cleans the merge

Я использую этот рабочий процесс все время, но он не удовлетворяет меня полностью, потому что он требует переключения ветвей (когда я на самом деле, возможно, не хочу выполнять фактическое слияние прямо в этот конкретный момент, я просто проверяю, что там)

Я целую вечность искал здесь хорошее решение, но пока ничего не найдено. Пробовал те:

hg diff -r "branch('.') and ! merge()"  # this page
hg diff -r "default:branch('.') and not merge()"
hg diff -r "parents(branch(.)):branch('.') and not merge()"

Эта проблема также обсуждается в:

Mercurial: как я могу увидеть только изменения, внесенные слиянием? который имеет хороший ответ как: «так что если вы можете определить это однозначно, вы можете убедить одного из нас, разработчиков Mercurial, которые читают SO для его реализации».

hg diff и передайте ему несколько наборов изменений, вы фактически выполните различие между этими наборами изменений, следовательно, вы увидите результат объединения.

Если вы хотите увидеть только изменения, сделанные с помощью наборов изменений, то вы можете использоватьexport:

$ hg export -r "branch('mybranch') and not merge()"
// lists the changes made by each changeset

Для удобства просмотра вы можете вывести их в файлы с именами на основе идентификатора ревизии / набора изменений:

$ hg export -r "branch('mybranch') and not merge()" -o "%H.patch"

... создает файл для каждого набора изменений без слияния вmybranchи выводит его в файл с именем «40-значный changeset id.patch». Если вы предпочитаете номер ревизии (полезно только для вашего локального репозитория, так как идентификаторы ревизий являются локальными), используйте"%R.patch".

Ваш ответ на вопрос