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