Git: как перечислять фиксации в этой ветке, но не из объединенных ветвей

Предположим, что ваша история переноса git выглядит следующим образом:

A---B---C---D---E---F master
     \         /
      X---Y---Z topic

Можно ли иметь git список только коммитов на master, A-F? Другими словами, если фиксация была в объединенной ветки, я не хочу, чтобы она показывалась.

Ответ 1

git log имеет опцию --first-parent, поэтому вы не получите историю topic.

При объединении с master, транзакции master являются первыми родителями в слиянии. Git log позволяет отображать только те коммиты с -first-parent, поэтому вы получаете нужный материал.

Ответ 2

Существует еще один общий способ сделать это, не полагаясь на --first-parent, который будет полезен в определенных ситуациях.. с использованием фильтров исключения ветвей

git log origin/topic ^origin/master Это даст вам журнал origin/topic с удалением всех origin/master.

вы также можете добавить в --no-merges, который будет скрывать комманды слияния, которые вы можете или не захотите.

Другим удобным советом является использование shortlog вместо log, который даст вам больше аббревиатурных сводок, которые могут быть полезны для заметок выпуска или передачи сообщений в ветке.

Обновление
После повторного чтения этого, вы действительно хотели бы почти инверсию того, что я разместил; однако это закончило бы исключение всего, что находится на master и foo (git log origin/master ^origin/foo). Однако вы также можете получить то, что попросите (скрыть все коммиты, которые являются частью слияний) с помощью git log origin/master --no-merges

Ответ 3

Не работает ли это?

git log master
git log --stat master