git log: список коммитов «между» двумя коммитами - PullRequest
2 голосов
/ 09 января 2020

Рассмотрим следующую git историю (представьте C как master и X ветвь функций, которая была объединена с master один раз):

    X
    |
    M
   /|
C E D
|/ /
B /
|/
A

Что git log пересмотр диапазона даст мне все коммиты, которые достижимы с X и включат изменения B, то есть B E M X?

NB: git log B..X будет включать D, что я не делаю хочу.

Ответы [ 2 ]

1 голос
/ 09 января 2020

Если причиной исключения D является то, что он не является потомком B, 1 , рассмотрите возможность использования --ancestry-path:

git log --ancestry-path B..X    # or git rev-list with the same arguments

Это, однако, исключает B в ревизионной прогулке. Включение B само по себе немного сложно: у вас есть опция --boundary, но это иногда включает слишком много коммитов. Другой метод заключается в использовании B^@ для исключения всех родителей B без исключения самого B. Это работает независимо от того, является ли B регулярным коммитом или слиянием, и в противном случае действие --ancestry-path остается без изменений. Это даже работает, если B является root коммитом, хотя в этом случае я не уверен, что --ancestry-path будет каким-либо использованием.

(Если B - обычный однопользовательский коммит, git log --ancestry-path B^..X делает трюк и проще думать о чем B^@.)


1 Это причина моего комментария к исходному вопросу о том, почему вы собираетесь исключить D.

0 голосов
/ 09 января 2020
git log X ^A ^D

^ до того, как ссылка является исключением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...