Git: как вывести список коммитов в этой ветке, но не из объединенных веток

90

Предположим, ваша история коммитов git выглядит так:

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

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

wch
источник
2
Итак, как git узнает, какое из Dи Zбыло частью объединенной ветки?
Romain
2
При слиянии с мастером предыдущие основные коммиты являются первыми родительскими объектами слияния. git logпозволяет отображать только те коммиты, с помощью которых --first-parentвы получаете правильный материал
CharlesB

Ответы:

133

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

Когда в результате объединения master, в masterкоммиты первые родители в слиянии. Журнал Git позволяет отображать только те коммиты с параметром --first-parent, так что вы получите нужные данные.

CharlesB
источник
25
+1 --first-parentделает это :) в сочетании с --no-mergesвы можете скрыть коммиты слияния
c00kiemon5ter
Я проголосовал за, но он все еще кажется чрезмерным по сравнению с моим ответом
UpAndAdam
22

TL ; DR : git log origin/master --no-mergesпредоставит вам журнал мастера и исключит любые объединенные коммиты (в данном случае x, y, z)

Исходные очки

Есть еще один общий способ сделать это, от которого не зависит, --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

UpAndAdam
источник
0

Мне подходит ответ Чарльза.

git log has option --first-parent --no-merges, so you won't get topic history.

Но если вы используете любой графический пользовательский интерфейс для своих действий Git, например Git Extension, SourceTree, Tortoise Git,

Затем есть прямые варианты проверки первого родителя в ваших инструментах. Я подумал добавить этот ответ в список, поскольку большинство людей находят графический интерфейс простым. и при необходимости вы можете напрямую выбрать все коммиты из этой конкретной ветки из инструмента.

Я приложил пример двух инструментов, он будет аналогичен и для других инструментов: [Я размыл имя пользователя, имя репозитория git, поскольку это частный репозиторий, но вы все же можете понять, как использовать первого родителя из инструментов ]

  1. Расширение Git
    • Откройте расширение Git -> Оформить заказ на ветку функции, в которой вы хотите видеть коммиты, есть возможность выбрать первые коммиты, как показано на изображении:

введите описание изображения здесь

  1. Черепаха Git
    • Откройте папку репозитория -> Щелкните Показать журналы из Tortoise Git -> Оформить заказ на ветку и выберите первые коммиты, как показано на изображении

введите описание изображения здесь

КушалСет
источник
-3

Это не работает?

git log master
git log --stat master
Стефан Кендалл
источник
Нет, это не работает. Коммит слияния имеет двух родителей; все, что отслеживается обоими родителями, находится в «главной» ветви.
GoZoner