Git: Як перерахувати коміти у цій гілці, але не з об’єднаних гілок


90

Припустимо, ваша історія коміту git виглядає так:

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

Чи можна мати git-список лише для комітів на master, AF? Іншими словами, якщо коміт був у об’єднаній гілці, я не хочу, щоб це відображалося.


2
Отже, як би git знав, який із об’єднаних гілок Dі Zвходив до нього?
Ромен

2
При об’єднанні з master, попередні майстер-коміти є першими батьками, що об’єднуються. git logдозволяє відображати лише ті коміти, з якими --first-parentви отримуєте потрібні речі
CharlesB

Відповіді:


133

git logмає опцію --first-parent, тому ви не отримаєте topicісторії.

При об’єднанні з master, masterкоміти є першими батьками, що об’єднуються. Журнал Git дозволяє відображати лише ті коміти з - first-parent, щоб ви отримували потрібні матеріали.


25
+1 --first-parentробить :) у поєднанні з --no-mergesвами можна приховати коміти злиття
c00kiemon5ter

Я проголосував, але це все одно здається надмірним порівняно з моєю відповіддю
UpAndAdam

22

TLDR : 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


0

Відповідь Чарльза працює для мене.

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

Але якщо ви використовуєте будь-який графічний користувальницький інтерфейс для своїх дій Git, наприклад, Git Extension, SourceTree, Tortoise Git,

Тоді є прямі варіанти перевірки першого батька у ваших інструментах. Я думав додати цю відповідь до списку, оскільки більшість людей вважають графічний інтерфейс простим. і Ви можете безпосередньо вишнево вибрати всі коміти з цієї конкретної гілки за допомогою інструменту, якщо потрібно.

Я додав приклад двох інструментів, це було б схоже і для інших інструментів: [Я затуманив ім'я користувача, git repo name, оскільки це приватне сховище, але все одно ви можете отримати уявлення про те, як використовувати першого батька з інструментів ]

  1. Розширення Git
    • Відкрийте розширення Git -> Оформити гілку функції, в якій ви хочете бачити коміти, є можливість вибрати перші коміти, як показано на малюнку:

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

  1. Черепаха Git
    • Відкрийте папку сховища -> Клацніть на Показати журнали з Tortoise Git -> Оформити гілку та виберіть перші коміти, як показано на зображенні

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


-3

Це не працює?

git log master
git log --stat master

Ніякі з них не працюють. Комітет злиття має двох батьків; все, що відстежується від обох цих батьків, знаходиться на гілці «господаря».
GoZoner
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.