Cronologia o registro dei comandi eseguiti in Git


96

C'è un modo per tenere traccia dei comandi che ho usato in Git sotto Windows? Voglio visualizzare tutti i comandi che ho applicato al mio repository.

Voglio essere in grado di tornare indietro nella cronologia dei comandi e capire il comando che ha causato il problema se si è verificato.

Vedere la cronologia dei commit sarebbe una cosa, ma per mantenere una cronologia di altre azioni come la creazione di un ramo o l'aggiunta di un telecomando, queste vengono tracciate?


3
Questo è un po 'a parte, ma se guardi dentro .git/logs, vedrai la cronologia di ciò a cui puntava ogni ramo.
Nayuki

1
@Nayuki Poiché l' pushing non cambia lo stato di una filiale locale, reflogapparentemente non memorizza pushes, quindi guardare dentro .git/logs/refs/remotes/*/*è l'unico modo per vedere la tua pushcronologia.
Kyle Strand

Risposte:


-8

git mostrerà le modifiche nei commit che influenzano l'indice, come git rm. Non memorizza un registro di tutti i comandi git che esegui.

Tuttavia, un gran numero di comandi git influisce in qualche modo sull'indice , come la creazione di un nuovo ramo. Queste modifiche verranno visualizzate nella cronologia dei commit, che puoi visualizzare con git log.

Tuttavia, ci sono cambiamenti distruttivi che git non può tracciare, come git reset.

Quindi, per rispondere alla tua domanda, git non memorizza una cronologia assoluta dei gitcomandi che hai eseguito in un repository. Tuttavia, è spesso possibile interpolare quale comando hai eseguito tramite la cronologia di commit.


2
In realtà, come una risposta di seguito giustamente menzionata, lo fa. "history" mostra l'elenco dei comandi eseguiti (dall'installazione).
Umesh .A Bhat

2
La shell memorizza la cronologia, ma git no, giusto?
Alex

3
@UmeshABhat git historysarebbe utile, ad esempio, per vedere quali comandi sono stati eseguiti in un particolare clone .
Kyle Strand

5
git reflogè quello che vuoi. Vedi la risposta sotto.
Chéyo

3
@ cp.engr: L'OP richiede la cronologia dei comandi git, non i commit di git. Questa risposta suggerisce di dedurre i comandi dai commit git, il che è un lavoro molto duro e non sempre possibile. git reflogmostra effettivamente i comandi stessi. Inoltre, a proposito, la shell è solo un modo leggermente più diretto per dedurre i comandi git, ma un repository git può essere toccato da più shell. È meglio chiedere a git quali comandi sono stati utilizzati.
combinatorista

183

Puoi vedere la cronologia con git-reflog ( esempio qui ):

git reflog

18
@PauAI mentre git reflog mostrerebbe tutte le posizioni che la tua HEAD stava seguendo, in realtà non mostrerà tutti i comandi git. I comandi Git che non muovono la testa (ad esempio git branch -D my_precious_branch) non verrebbero visualizzati lì.
Yonatan

@Yonatan, non ce l'avresti fatta git reflog --all?
combinatorista

2
@combinatorist prova ad aggiungere un telecomando (come il PO dato per esempio): git remote add foo bar. non apparirà in git reflog --all, poiché non modifica il puntatore HEAD.
Yonatan

git reflognon mi mostra comandi come git statusaso., con o senza --allparametro.
Lorenz

62

Un registro dei tuoi comandi potrebbe essere disponibile nella cronologia della shell.

history

Se vedere l'elenco dei comandi eseguiti in volo non fa per te, esporta l'elenco in un file.

history > path/to/file

Puoi limitare il dump esportato in modo che mostri solo i comandi con "git" inserendolo in pipe con grep

history | grep "git " > path/to/file

La cronologia può contenere righe formattate come tali

518  git status -s
519  git commit -am "injects sriracha to all toppings, as required"

Utilizzando il numero è possibile rieseguire il comando con un punto esclamativo

$ !518
git status -s

8

Se stai usando CentOS o un altro tipo di Linux, fai semplicemente Ctrl+ Ral prompt e digita git.

Se continui a premere Ctrl+, Rverrà eseguita una ricerca inversa nella cronologia per i comandi che iniziano congit


7

Digita il historytuo terminale. Tecnicamente non è git, ma penso che sia quello che vuoi.


6

Se utilizzi Windows PowerShell, puoi digitare "git" e premere F8. Continua a premere F8 per scorrere tutti i tuoi comandi git.

Oppure, se usi cygwin, potresti fare la stessa cosa con ^ R.


Nella normale sessione di Windows puoi usare il tasto F7 per ottenere una piccola finestra che ti dà un elenco di tutti i comandi inseriti in quella sessione
milso

0

Ho scoperto che nella mia versione di git bash "2.24.0.windows.2" nella mia cartella "home" sotto gli utenti di Windows, ci sarà un file chiamato ".bash-history" senza estensione di file in quella cartella. Viene creato solo dopo essere usciti da bash.

Ecco il mio flusso di lavoro:

  1. prima di uscire da bash digitare "history >> history.txt" [INVIO]
  2. uscire dal prompt di bash
  3. tieni premuto Win + R per aprire la casella di comando Esegui
  4. entrare in shell: profilo
  5. apri "history.txt" per confermare che il mio testo è stato aggiunto
  6. Su una nuova riga premere [F5] per inserire un timestamp
  7. salvare e chiudere il file di testo della cronologia
  8. Elimina il file ".bash-history" così la prossima sessione creerà una nuova cronologia

Se vuoi davvero dei punti, immagino che potresti creare un file batch per fare tutto questo, ma questo è abbastanza buono per me. Spero che aiuti qualcuno.

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.