К сожалению, без создания новых коммитов это как-то не определено.Возможно, что разница, введенная J
, даже не имеет смысла без того, что было объединено в I
, а именно B
и C
.
Предполагая, что J
действительно не пересекается с B
и C
, вам нужно каким-то образом создавать новые коммиты, чтобы получить комбинированный дифференциал, потому что то, что вы запрашиваете, невозможно (в общем случае) определить без итеративного применения патчей и просмотра результата.Однако самый быстрый способ сделать это - не собирать вишню.Вместо этого вы можете воспользоваться тем, что rebase
по умолчанию не сохраняет коммиты слияния.Поэтому:
# create a temporary copy of branch A
git branch branch-A-tmp branch-A
# rebase that copy in place, thus removing the merge commits
git rebase commit-A branch-A-tmp
# examine the diff
git diff commit-A branch-A-tmp
Если изменения, сделанные в J
, не отделимы от изменений в B
и C
, слитых в I
, вы получите конфликты слияния при попытке перебазирования-apply J
, что указывает на то, что запрашиваемая разница не является четко определенной.В противном случае вы получите различий, которые вы ищете.