Я искал что-то похожее, за исключением вашего требования «не подряд». Я делюсь этим на тот случай, если это поможет кому-то, кто пришел сюда с тем же вопросом, что и я (похожий на ваш), или если он поможет вам приблизиться к вашему ответу.
У меня есть ветвь функций, которая отличается от главной - т.е. обе ветки имеют новые коммиты со времени их последнего общего предка, и я хочу знать, что изменится ветка feature Попробуй ввести, если слился с мастером.
git diff master feature
не будет делать то, что я хочу, потому что каждое новое изменение в мастере, поскольку функция разветвлена, будет отображаться отрицательно , потому что функция не имеет его. Я хочу видеть только положительную работу, проделанную над функцией.
git log --stat master..feature
подходит ближе, показывая мне файлы, измененные каждым коммитом на объекте, так как он отличался от основного. Но все еще трудно использовать, если функция имеет десятки новых коммитов.
Что я хочу увидеть, так это «сжатую» версию ветви функций изменений, которая содержит относительно мастера, но игнорирует изменения, внесенные в мастер после ветвления.
Вот что у меня работает:
# get the commit ID of the last common ancestor
git merge-base feature master
# show the diff from that ancestor to the head of feature branch
# (works with --stat option too, to summarize changes)
git diff <ancestor ID> feature
# combined form:
git diff `git merge-base feature master` feature