Risposte:
Hai almeno 5 modi diversi per visualizzare il commit che hai attualmente estratto nella tua copia di lavoro durante una git bisect
sessione ( nota che le opzioni 1-4 funzioneranno anche quando non esegui una bisect ):
git show
.git log -1
.git status
.git bisect visualize
.Spiegherò ogni opzione in dettaglio di seguito.
Come spiegato in questa risposta alla domanda generale su come determinare quale commit è stato estratto (non solo durante git bisect
), è possibile utilizzare git show
con l' -s
opzione per eliminare l'output della patch:
$ git show --oneline -s
a9874fd Merge branch 'epic-feature'
Puoi anche semplicemente fare git log -1
per scoprire a quale impegno sei attualmente impegnato.
$ git log -1 --oneline
c1abcde Add feature-003
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 c1abcde
verificato:
# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $
# Prompt at detached HEAD state
user ~ (c1abcde...) $
Anche a partire dalla versione 1.8.3+ di Git (e possibilmente in precedenza, di nuovo non sono sicuro), l'esecuzione git status
ti 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
Infine, mentre stai eseguendo un git bisect
, puoi anche semplicemente usare git bisect visualize
o il suo alias integrato git bisect view
per 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
git status
non ti mostra l'id di commit a meno che tu non sia in stato distaccato altrimenti dice "Sul ramo qualunque ". git show
funziona però
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 bisect
sessione, 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 HEAD
punta. Per una versione più concisa, puoi fare:
$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation
git rev-parse HEAD
non richiede elaborazione rispetto a tutte le alternative di immondizia.
$ 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
Se vuoi estrarre solo una semplice informazione, puoi ottenerla usando git show
l' --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}show
non ha nulla per il ramo .
git log -p -S <search>
lo più fa il lavoro.