Come cercare tra le recenti modifiche al commit di Git

0
136

È possibile rintracciare quando e dove sono state aggiunte righe di codice alla base di codice un mal di testa, ma Git memorizza tutti i log delle modifiche e ha alcuni strumenti per la ricerca tra le differenze di commit. Puoi usarli per trovare le righe che corrispondono a una determinata stringa di ricerca.

Uso di Git Log

Sfortunatamente siti come GitHub non offrono questa funzionalità, quindi dovrai utilizzare git log. Questo comando ha molti parametri, inclusa la possibilità di cercare attraverso le differenze di commit, ma gestire l'output è un po' ingombrante.

In ogni caso, il display interattivo del pager di Git è piuttosto goffo per molte persone, quindi consigliamo di eseguire una ricerca nella barra dei comandi con /Search o di inviare l'output direttamente alla console con | cat o in un file con > log.txt, dove può essere cercato in modo più efficace.

L'esecuzione di questo tipo di ricerca su un intero repository genererà probabilmente un output molto grande. Probabilmente vorrai vedere i commit in un determinato intervallo di tempo, cosa che puoi fare con –after e –before, che richiedono date e date relative come “2 settimane” e “3 mesi.” Il seguente comando ignora i commit più vecchi di un mese e mezzo e ignora anche i commit molto recenti.

git log –after=”6 week” –before=”1 week”

Se vuoi semplicemente sapere quali commit contengono una determinata stringa di ricerca, puoi utilizzare -S, che richiede di inserire la stringa di ricerca subito dopo senza spazi.

git log –after=”6 week” – S'Dictionary' –stat

Pubblicità

Se si&#8217 Se desideri visualizzare i file con questo output, puoi utilizzare il flag -p:

git log –after=”6 week” -S'Dictionary' –stat -p | gatto

Tuttavia, questo output è enorme per qualsiasi query di grandi dimensioni e non è molto diverso dall'aprirlo semplicemente nel tuo IDE. Per risolverlo, dovremo usare grep e sed, il che significa che i comandi diventeranno sfortunatamente complicati.

Uso di sed per smarter Corrispondenza

Per abbinare e stampare le linee effettive nel file, devi usare grep, reindirizzando l'output ad esso per stampare le linee su cui ha trovato il motivo. Ciò richiede di digitare il modello due volte:

git log –after=”6 settimane” -S'Dictionary' –stat -p | grep 'Dizionario'

Tuttavia, questo ha un problema—non include più i messaggi di commit o gli ID. Per risolvere questo problema, dobbiamo eseguire sed:

SEARCH=Dictionary && git log –after=”6 settimane” -S$SEARCH –stat -p | sed -n “/commit/,/diff/p; /$SEARCH/p”

Questo comando imposta una variabile SEARCH, poiché digitare due volte il termine di ricerca è scomodo. Esegue git log –stat -p, che stampa l'intero output, ma viene passato a sed per l'analisi. sed corrisponde a tutte le righe tra “commit” e “differenza,” che cattura l'output dell'intestazione –stat. Quindi, aggiunge la riga corrispondente, producendo un output utilizzabile effettivo.

Forse usa Git Blame invece

Gli esempi sopra funzionano bene per la ricerca in un'intera base di codice. Ma, se sai quale file è stato modificato, e invece vuoi solo capirne la storia, potresti voler usare git colpa.

Pubblicità

Git-blame stamperà l'intero file, ma annota ogni riga con l'ultima persona che l'ha modificata. Ciò ti consentirà di rintracciare rapidamente le modifiche e, in molti casi, di dare la colpa ai tuoi colleghi.

Puoi usare il comando git colpa, ma GitHub ha un'ottima GUI, disponibile facendo clic sul pulsante file in questione e premendo “Blame.”

Nota che puoi anche visualizzare la cronologia cronologica del file dalla stessa interfaccia; Git colpa condensa tutto in un singolo output.