Git: come elencare i commit su questo ramo ma non dai rami uniti


92

Supponiamo che la cronologia dei commit di git sia simile a questa:

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

È possibile avere in git list solo i commit su master, AF? In altre parole, se il commit era su un ramo unito, non voglio che venga mostrato.


2
Quindi, come farebbe git a sapere quale di De Zfaceva parte del ramo fuso?
Romain

2
Quando vengono uniti dal master, i commit master precedenti sono i primi genitori nell'unione. git logconsente di visualizzare solo i commit con --first-parent, in modo da ottenere le cose giuste
CharlesB

Risposte:


134

git logha un'opzione --first-parent, quindi non otterraitopic cronologia.

Quando vengono uniti da master, i mastercommit sono i primi genitori nell'unione. Git log consente di visualizzare solo quei commit con --first-parent, in modo da ottenere le cose giuste.


25
+1 lo --first-parentfa :) combinato con --no-mergespuoi nascondere i commit di unione
c00kiemon5ter

Ho votato verso l'alto, ma sembra ancora eccessivo rispetto alla mia risposta
UpAndAdam

22

TLDR : git log origin/master --no-mergesti darà un log del master ed escluderà qualsiasi commit unito (in questo caso x, y, z)

Punti originali

C'è un altro modo generale per fare ciò che non si basa su --first-parentche sarà utile in determinate situazioni .. utilizzando i filtri di esclusione dei rami

git log origin/topic ^origin/master Questo ti darà un registro origin/topiccon tutti origin/masteri commit rimossi.

potresti anche aggiungere --no-mergesche nasconderà i commit di unione che potresti o meno desiderare.

Un altro suggerimento utile è quello di utilizzare al shortlogposto del logquale fornirà più di un riepilogo abbreviato che può essere utile per le note di rilascio o la comunicazione di cosa c'è in un ramo.

Aggiorna
Dopo aver riletto questo, in realtà vorresti quasi il contrario di quello che ho postato; tuttavia finirebbe per escludere tutto ciò che è su master e foo ( git log origin/master ^origin/foo). Tuttavia puoi anche ottenere ciò che chiedi (nascondere tutti i commit che fanno parte delle unioni) congit log origin/master --no-merges


0

La risposta di Charles funziona per me.

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

Ma se stai utilizzando un'interfaccia utente grafica per le tue attività Git come Git Extension, SourceTree, Tortoise Git,

Poi ci sono opzioni dirette per controllare il primo genitore nei tuoi strumenti. Ho pensato di aggiungere questa risposta all'elenco poiché la maggior parte delle persone trova facile l'interfaccia grafica. e Puoi selezionare direttamente tutti i commit da quel particolare ramo dallo strumento, se necessario.

Ho allegato l'esempio di due strumenti, sarebbe simile anche per altri strumenti: [Ho offuscato il nome utente, il nome del repository git poiché si tratta di un repository privato, ma puoi comunque farti un'idea di come utilizzare il primo genitore dagli strumenti ]

  1. Estensione Git
    • Apri l'estensione Git -> Controlla il ramo delle funzionalità in cui vuoi vedere i commit, c'è un'opzione per selezionare i primi commit come mostrato nell'immagine:

inserisci qui la descrizione dell'immagine

  1. Tartaruga Git
    • Apri la cartella del repository -> Fai clic su Mostra registri da Tortoise Git -> Controlla il ramo e seleziona i primi commit come mostrato nell'immagine

inserisci qui la descrizione dell'immagine


-3

Non funziona?

git log master
git log --stat master

No, quelli non funzionano. Il commit di unione ha due genitori; tutto ciò che viene rintracciato da entrambi i genitori si trova nel ramo "maestro".
GoZoner
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.