Git: перечислите все коммиты, которые являются дочерними элементами ревизии A и родительскими элементами ревизии B

#git #git-log

#git #git-log

Вопрос:

Ревизии A несколько дней, ревизии B несколько месяцев. Тем не менее, при использовании git log A..B or git log A...B я получаю ревизии, которым несколько лет. Для меня это не имеет смысла. Как мне выделить историю коммитов, которые являются как дочерними элементами A , так и родителями B ?

Комментарии:

1. Было бы B..A получить все, что доступно от A (то есть от родителей A ), но недоступно от B . (И A...B является симметричной разницей, что означает A..B ПЛЮС B..A )

Ответ №1:

Вы можете использовать --ancestry-path опцию git log :

--ancestry-path
При задании диапазона коммитов для отображения (например, commit1..commit2 или commit2 ^commit1 ), отображаются только те коммиты, которые существуют непосредственно в цепочке предков между commit1 и commit2 , т. Е. коммиты, которые являются как потомками commit1 , так и предками commit2 .

В вашем случае вы бы сказали:

 git log --ancestry-path A..B
  

Чтобы получить коммиты, которые являются дочерними элементами A и родителями B .