Git mostra tutti i rami (ma non gli stash) nel registro


85

Ho un alias Git che si espande in:

git log --graph --oneline --all --decorate

Secondo man git logci sono un paio di opzioni sospette: --note --branches; ma non riesco a farlo funzionare correttamente.

Come dovrei modificarlo per nascondere le scorte?


FYI : secondo la domanda e il commento accettati, il mio .gitconfigalias ora assomiglia a questo:

[alias]
    l = log --branches --remotes --tags --graph --oneline --decorate --notes HEAD

Risposte:


125

Invece di fare --alle poi provare a filtrare le scorte, non includerle mai in primo luogo:

git log --branches --remotes --tags --graph --oneline --decorate

Il problema principale che sorge dal tentativo di filtrarli in seguito è che se lo stash è l'ultimo commit su quel ramo (perché anche se non è headil ramo del ramo, è ancora il discendente più recente di esso), può effettivamente filtrare l'intero ramo dal registro, che non è quello che vuoi.


2
Grande! Aggiungerei --tagsper completezza.
cYrus

Sospetto --tagsdi essere ridondante, poiché nessun tag dovrebbe mai essere un discendente del headdi un ramo o di un telecomando, anche se non l'ho verificato.
Andrew Marshall

3
Ho appena provato questo git checkout -b test:; aggiunto un commit; git tag foo; git checkout master; git branch -D test. Il tag è presente ma non verrà mostrato senza --tags.
cYrus

2
Una piccola aggiunta: dovresti aggiungere HEADalla fine. Altrimenti, se sei in modalità HEAD scollegata e nessun altro riferimento punta al commit HEAD, non lo vedrai nel grafico.
mziwisky

6

Il mio alias:

[alias]
    l = log --oneline --decorate --graph --exclude=refs/stash

In questo caso sarai in grado di utilizzare questi moduli senza mostrare la scorta:

  • git l per il ramo corrente
  • git l feature234 per un ramo specifico
  • git l --all per la storia generale

Dal manuale:

--exclude = <modello glob>

Non includere le corrispondenze di riferimento che il successivo --all, --branches, --tags, --remotes o --glob considererebbe altrimenti.


4
Nota che l'ordine dei parametri è importante: --all --exclude=refs/stashincluderebbe comunque lo stash, mentre --exclude=refs/stash --alllo escluderebbe correttamente.
Mikhail Burshteyn

4

Si noti che la risposta di Andrew non funzionerebbe per nascondere i rami StGit 1.)<branch>.stgit (dalla versione StGit 0.15) che altrimenti sporcano l'output rendendolo inutilizzabile.

Attualmente utilizzo la seguente soluzione:

$ git log --graph --oneline --decorate \
  $(git for-each-ref --format="%(refname)" refs/heads/ refs/remotes/ |
    grep -v "\.stgit$")

1.) StGit (" St acked Git ") fornisce funzionalità simili a Quilt / mq a Git (ad esempio, inviare / estrarre patch da / a uno stack).


Considera l'utilizzo --exclude. Come:git log --graph --exclude=refs/heads/*.stgit --exclude=refs/patches/* --exclude=refs/stash --all
gavenkoa
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.