La pagina man indica che il registro mostra i registri di commit e il reflog gestisce le informazioni di reflog. Cosa sono esattamente le informazioni di reflog e cosa ha che il registro non ha? Il registro sembra molto più dettagliato.Qual è la differenza tra git reflog e log?
risposta
git log
mostra l'attuale HEAD e la sua discendenza. Cioè, stampa i punti HEAD di commit su, quindi i suoi genitori, i suoi genitori e così via. Attraversa la discendenza del repository, guardando in modo ricorsivo su ciascun genitore del commit.
(In pratica, alcuni commit hanno più di un genitore. Per vedere un registro più rappresentativo, utilizzare un comando come git log --oneline --graph --decorate
.)
git reflog
non attraversare antenati di HEAD a tutti. Il reflog è un elenco ordinato dei commit che HEAD ha indicato: è la cronologia degli annullamenti per il repository. Il reflog non fa parte del repository stesso (è memorizzato separatamente per i commit stessi) e non è incluso in push, fetch o cloni; è puramente locale.
A parte: la comprensione del reflog significa che non è possibile perdere i dati dal repository una volta che è stato eseguito il commit. Se si ripristina accidentalmente un commit precedente, o il rebase errato, o qualsiasi altra operazione che visivamente "rimuove" commette, è possibile utilizzare il reflog per vedere dove si trovava prima e git reset --hard
indietro a tale riferimento per ripristinare lo stato precedente. Ricorda, i ref implicano non solo il commit ma l'intera storia dietro di esso.
Ecco il explanation of reflog
from the Pro Git book:
Una delle cose che Git fa in background mentre si lavora lontano è tenere un reflog - un registro di cui la testa e filiali riferimenti sono stati per gli ultimi mesi .
Potete vedere il vostro reflog utilizzando
git reflog
:$ git reflog 734713b... [email protected]{0}: commit: fixed refs handling, added gc auto, updated d921970... [email protected]{1}: merge phedders/rdocs: Merge made by recursive. 1c002dd... [email protected]{2}: commit: added some blame and merge stuff 1c36188... [email protected]{3}: rebase -i (squash): updating HEAD 95df984... [email protected]{4}: commit: # This is a combination of two commits. 1c36188... [email protected]{5}: rebase -i (squash): updating HEAD 7e05da5... [email protected]{6}: rebase -i (pick): updating HEAD
Ogni volta che la punta ramo viene aggiornato per qualsiasi motivo, Git registra l'informazione per voi in questa storia temporanea. E puoi anche specificare i vecchi commit con questi dati.
Il comando reflog
può anche essere utilizzato per eliminare voci o scadere le voci dal reflog che sono troppo vecchie. Dal official Linux Kernel Git documentation for reflog
:
Il sottocomando
expire
è usato per potare le voci reflog anziani.Per eliminare singole voci dal reflog, utilizzare il sottocomando
delete
e specificare la voce esatta (ad esempiogit reflog delete [email protected]{2}
).
Ma non il 'git log' fornire le stesse informazioni?Scusate se sembra ovvio, sono molto nuovo a GIT e vorrei avere alcune basi prima del mio primo OMG. – Noich
Git log è un record del tuo *** *** ***. Il reflog, come afferma il libro Pro Git, è una registrazione dei tuoi *** riferimenti *** (in pratica, i tuoi puntatori di ramo e il tuo puntatore "HEAD'), e che commettono a cui hanno puntato. Ha senso? In una nota a margine, 'log' può anche mostrare le informazioni di reflog, ma devi passare un flag di opzione speciale come argomento,' --walk-reflogs'. –
Inoltre, dato che sei un principiante Git, ti consiglio vivamente di leggere il libro Pro Git, è come ho imparato la maggior parte di ciò che ho imparato su Git. Raccomando i capitoli 1-3 e 6-6.5. Consiglio inoltre vivamente di imparare come rebase sia interattivamente che in modo non interattivo. –
git log
mostra il commit di registro accessibile dagli arbitri (teste, tag, telecomandi)git reflog
è un record di di tutti i commit che sono o sono state utilizzate in pronti contro termine in qualsiasi momento.
Ecco perché git reflog
(un locale di registrazione che viene potata dopo 90 giorni per impostazione predefinita) viene utilizzato quando si esegue un'operazione di "distruttivo" (come l'eliminazione di un ramo), al fine di recuperare l'SHA1 che è stato riferito da quel ramo.
Vedi git config
:
gc.reflogexpire
gc.<pattern>.reflogexpire
git reflog
scadono rimuove le voci reflog di età superiore a questo momento; il valore predefinito è 90 giorni.
Con "<pattern>
" (ad esempio "refs/stash
") nel mezzo l'impostazione si applica solo ai riferimenti che corrispondono allo<pattern>
.
git reflog
è spesso riferimento come "your safety net"
In caso di problemi, il consiglio generale, quando git log non mostra ciò che si sta cercando, è:
Di nuovo, reflog è una registrazione locale del tuo SHA1.
In contrasto con git log
: se si spinge il repository su un upstream repo, si vedrà lo stesso git log
, ma non necessariamente lo stesso git reflog
.
ero curioso di questo come bene e vogliono solo per elaborare e riassumere un po ':
git log
mostra una storia di tutti i commit per il ramo si è in. Esegui il checkout di un altro ramo e vedrai una cronologia di commit diversa. Se si desidera visualizzare la cronologia di commit per tutti i rami, digitaregit log --all
.git reflog
mostra un record dei tuoi riferimenti come ha detto Cupcake. C'è una voce ogni volta che un commit o un checkout è fatto. Prova a passare avanti e indietro tra due rami un paio di volte usandogit checkout
ed eseguigit reflog
dopo ogni checkout. Vedrai la voce più alta che viene aggiornata ogni volta come una voce di "checkout". Non vedi questi tipi di voci ingit log
.
Riferimenti: http://www.lornajane.net/posts/2014/git-log-all-branches
- 1. Differenza tra git-log e git-whatchanged?
- 2. Qual è la differenza tra git push e git pull?
- 3. Qual è la differenza tra git am e git?
- 4. Qual è la differenza tra "git reset" e "git rebase"?
- 5. Qual è la differenza tra. e * in "git add"?
- 6. Qual è la differenza tra vimdiff e vimdiff2 in git?
- 7. Qual è la differenza tra IntelliJ's Shelve e Git stash?
- 8. Qual è la differenza tra tag e branch con git?
- 9. Qual è la differenza tra = e: =
- 10. Qual è la differenza tra Verilog! e ~?
- 11. Qual è la differenza tra? : e ||
- 12. qual è la differenza tra [[], []] e [[]] * 2
- 13. Qual è la differenza tra $ e $$?
- 14. Qual è la differenza tra ("") e (null)
- 15. Qual è la differenza tra dict() e {}?
- 16. Qual è la differenza tra " " e ""?
- 17. Qual è la differenza tra {0} e ""?
- 18. Qual è la differenza tra `##` e `hashCode`?
- 19. Qual è la differenza tra {0} e +?
- 20. Qual è la differenza tra .ToString() e + ""
- 21. qual è la differenza tra:.! e: r !?
- 22. git log la differenza tra 1 ramo da un altro
- 23. Qual è la differenza tra "git remote update", "git fetch" e "git pull"?
- 24. Differenza tra 'git log origine/master' vs 'git log origine/master ..'
- 25. Qual è la differenza tra staging e caching?
- 26. Qual è la differenza tra spark.eventLog.dir e spark.history.fs.logDirectory?
- 27. Qual è la differenza tra logcat e dmesg?
- 28. Qual è la differenza tra svn import e checkout?
- 29. Qual è la differenza tra origine e upstream su GitHub?
- 30. Qual è la differenza tra origine push git e master origine git push
Una parola di cautela: a volte PUOI perdere i dati perché le voci di reflog non persistono eternamente - vengono eliminate in determinate condizioni. Vedi [questa risposta] (http://stackoverflow.com/a/26451688/1614641) e i documenti per [git-reflog] (https://www.git-scm.com/docs/git-reflog) e [ git-gc] (https://www.git-scm.com/docs/git-gc). Generalmente, se l'operazione distruttiva non era più di 2 settimane fa, probabilmente sei al sicuro. – mcmlxxxvi
@mcmlxxxvi Ho due cartelle locali per lo stesso repository, posso unire i diagrammi per le due cartelle? – Tmx