Scopri quale commit è attualmente estratto in Git


157

Sono nel mezzo di una git bisectsessione.

Qual è il comando per scoprire su quale commit (hash SHA1) sono attualmente attivo? git statusnon fornisce questo.

Modifica: immagino che chiamare git loge guardare le opere della prima voce?

Risposte:


173

Hai almeno 5 modi diversi per visualizzare il commit che hai attualmente estratto nella tua copia di lavoro durante una git bisectsessione ( nota che le opzioni 1-4 funzioneranno anche quando non esegui una bisect ):

  1. git show.
  2. git log -1.
  3. Bash prompt.
  4. git status.
  5. git bisect visualize.

Spiegherò ogni opzione in dettaglio di seguito.

Opzione 1: git show

Come spiegato in questa risposta alla domanda generale su come determinare quale commit è stato estratto (non solo durante git bisect), è possibile utilizzare git showcon l' -sopzione per eliminare l'output della patch:

$ git show --oneline -s
a9874fd Merge branch 'epic-feature'

Opzione 2: git log -1

Puoi anche semplicemente fare git log -1per scoprire a quale impegno sei attualmente impegnato.

$ git log -1 --oneline
c1abcde Add feature-003

Opzione 3: prompt Bash

Nella versione 1.8.3+ di Git (o era una versione precedente?), Se hai il prompt di Bash configurato per mostrare il ramo corrente che hai estratto nella tua copia di lavoro, ti mostrerà anche il commit corrente che hai controllato durante una sessione bisect o quando sei in uno stato "HEAD distaccato". Nell'esempio seguente, attualmente ho c1abcdeverificato:

# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $

# Prompt at detached HEAD state 
user ~ (c1abcde...) $

Opzione 4: stato git

Anche a partire dalla versione 1.8.3+ di Git (e possibilmente in precedenza, di nuovo non sono sicuro), l'esecuzione git statusti mostrerà anche quale commit hai eseguito il check-in durante un bisect e quando sei in stato HEAD distaccato:

$ git status
# HEAD detached at c1abcde <== RIGHT HERE

Opzione 5: visualizza git bisect

Infine, mentre stai eseguendo un git bisect, puoi anche semplicemente usare git bisect visualizeo il suo alias integrato git bisect viewper avviare gitk, in modo da poter visualizzare graficamente su quale commit ti stai impegnando, e quali commit hai contrassegnato come cattivo e buono finora. Sono abbastanza sicuro che esistesse ben prima della versione 1.8.3, non sono sicuro di quale versione fosse stata introdotta:

git bisect visualize 
git bisect view # shorter, means same thing

inserisci qui la descrizione dell'immagine


Neat. Quando ho posto la domanda non ero su Git 1.8, e da allora mi sono procurato un prompt di destra zsh che mostra l'hash di commit, penso che potrebbe anche mostrare un indicatore speciale specifico se sto bisecando, ma non ho " In realtà non ho fatto più bisecare dal momento in cui ho posto questa domanda, per git log -p -S <search>lo più fa il lavoro.
Steven Lu,

git statusnon ti mostra l'id di commit a meno che tu non sia in stato distaccato altrimenti dice "Sul ramo qualunque ". git showfunziona però
Kip

88

Puoi semplicemente fare:

git rev-parse HEAD

Per spiegare un po 'di più: git rev-parseè il comando di base di git per interpretare uno dei modi esotici in cui è possibile specificare il nome di un commit ed HEADè un riferimento al proprio commit o ramo corrente. (In una git bisectsessione, punta direttamente a un commit ("HEAD distaccato") anziché a un ramo.)

In alternativa (e più facile da ricordare) sarebbe semplicemente fare:

git show

... che per impostazione predefinita mostra il commit a cui HEADpunta. Per una versione più concisa, puoi fare:

$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation

3
Se vuoi semplicemente ottenere l'hash per l'uso altrove, git rev-parse HEADnon richiede elaborazione rispetto a tutte le alternative di immondizia.
Nick T

17
$ git rev-parse HEAD
273cf91b4057366a560b9ddcee8fe58d4c21e6cb

Aggiornare:

In alternativa (se hai tag):

(Buono per nominare una versione, non molto buono per tornare a git.)

$ git descrivono
v0.1.49-localhost-ag-1-g273cf91

Oppure (come suggerito Mark, elencando qui per completezza):

$ git show --oneline -s
c0235b7 Autorota le immagini caricate in base all'orientamento EXIF

7
Hai chiesto un SHA1, non qualcosa di facile da ricordare. ;-)
Alexander Gladysh il

Questa versione è molto utile se vuoi fare qualche controllo in uno script
Daniele Licitra,

13

Se vuoi estrarre solo una semplice informazione, puoi ottenerla usando git showl' --format=<string>opzione ... e chiederle di non darti il ​​diff --no-patch. Ciò significa che puoi ottenere un output in stile printf di qualsiasi cosa tu voglia, che potrebbe essere spesso un singolo campo.

Ad esempio, per ottenere solo l'hash abbreviato ( %h) potresti dire:

$ git show --format="%h" --no-patch
4b703eb

Se stai cercando di salvarlo in una variabile d'ambiente in bash (una cosa probabile che le persone vogliano fare) puoi usare la $()sintassi :

$ GIT_COMMIT="$(git show --format="%h" --no-patch)"

$ echo $GIT_COMMIT
4b703eb

L' elencogit show --help completo di ciò che puoi fare è in . Ma ecco un elenco abbreviato di proprietà che potrebbero essere utili:

  • %H commettere hash
  • %h hash di commit abbreviato
  • %T hash dell'albero
  • %t hash abbreviato dell'albero
  • %P hash dei genitori
  • %p hash parent abbreviati
  • %an nome dell'autore
  • %ae email dell'autore
  • %at data dell'autore, data / ora UNIX
  • %aI data dell'autore, rigoroso formato ISO 8601
  • %cn nome del committer
  • %ce email committer
  • %ct data del committer, data / ora UNIX
  • %cI data di consegna, formato ISO 8601 rigoroso
  • %s soggetto
  • %f riga dell'oggetto disinfettata, adatta per un nome file
  • %gD selettore reflog, ad es. refs / stash @ {1}
  • %gd selettore reflog abbreviato, ad es. stash @ {1}

Tutte quelle opzioni di formattazione, ma shownon ha nulla per il ramo .
bvj

2

Usa git show, che mostra anche il messaggio di commit e imposta automaticamente il commit corrente quando non viene dato alcun argomento.

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.