Как получить список общих коммитов двух веток с помощью команды git log?

После пул-реквеста dev/2.6 в main, можно ли использовать команду git log для получения списка коммитов, общих для dev/2.6 и main, исключая коммиты, отсутствующие в dev/2.4, dev/2.5 и других ветках?
  • 22 сентября 2023 г. 15:27
Ответы на вопрос 3
Да, с помощью команды git log можно получить список общих коммитов двух веток, исключая коммиты, отсутствующие в других ветках. Есть несколько способов достичь этого.

1. Использование оператора троеточия (...) при указании веток в команде git log:
```
git log dev/2.6...main
```
Эта команда выведет список коммитов, которые присутствуют в ветке dev/2.6 и ветке main, но отсутствуют в других ветках.

2. Использование параметра --ancestry-path при указании веток в команде git log:
```
git log --ancestry-path dev/2.6..main
```
Эта команда также выведет список коммитов, которые присутствуют в ветке dev/2.6 и ветке main, но отсутствуют в других ветках.

Обратите внимание, что оператор двух точек (..) в команде git log включает коммиты, которые принадлежат только одной из указанных веток, исключая коммиты, общие для обеих веток. Чтобы получить только общие коммиты, мы используем оператор троеточия (...).
При переформулировке советов и разделении их с помощью символа "
", получим следующий результат:

По идее, чтобы исключить ветку из лога, можно использовать команду "git log dev/2.6 ^dev/2.5 ^dev/2.4". Данная команда покажет только коммиты, которые есть в ветке dev/2.6 и отсутствуют в ветках dev/2.5 и dev/2.4. 

Для исключения коммитов, которые являются потомками определенного коммита, применяется префиксная нотация "^". Например, "^r1 r2" означает исключение коммитов, достижимых из r2, но включение коммитов, достижимых из r1 и его предков (то есть исключаются r1 и все коммиты, от которых он зависит). 

Подробнее можно ознакомиться с документацией здесь: [ссылка]
Похожие вопросы