Есть ли простой способ получить разницу между несколькими (более чем двумя) ветвями с git? (Что-то вроде «octopus diff»?)Многоотраслевой diff с git?
Ситуация такова, что есть ветка (назовем ее ветвью А), которая является результатом слияния нескольких других ветвей (назовем их B и C) вместе с другими изменениями , (Филиал A, отклоненный от ветви B, имел ряд локальных модификаций, затем была объединена ветвь C, затем добавлены локальные модификации, затем еще более локальные модификации и повторное объединение, чтобы включать обновления в ветвях B и C.)
что я хотел бы сделать, это увидеть все локальные изменения уникальные расшириться А - то есть, посмотреть, какие изменения были сделаны расшириться А, не на любой ветви B или C. филиал
Это работает только если B и C являются полностью объединены в A. Если эти ветви еще не объединены в A, они будут отображаться как обратное изменение diff. Чтобы исправить это, я думаю, что git merge-base должна помочь: 'git checkout -b bPlusC B $ (git merge-base AB)' и 'git merge -no-ff $ (git merge-base AC)' (Хотя вам действительно нужен -no-ff?) –
@RM Я изменил ответ. '--no-ff' не является строго необходимым, но он оставляет больше видимого следа. Поскольку вы не будете толкать эту ветку (я надеюсь), я не очень беспокоюсь о том, чтобы сделать «уродливое» слияние. –
Незначительное добавление/коррекция: в зависимости от того, насколько сложным является ваш шаблон слияния, может быть * несколько * объединенных баз, но по умолчанию выводится только одно. Флаг «-all» получит их все, но протокол немного изменится. «Git merge-base - all A B C» должен (?) Найти SHA1 соответствующих коммитов (ветвь A должна быть первой, а затем две или более отрицательных ветвей). Если только один, поздравляю, просто используйте это как ссылку на diff. Если несколько, то используйте стратегию new-branch + merge с перечисленными SHA1, в отличие от коммитов B & C или подстановки команд. –