2010-04-23 13 views
38

Ho bisogno di cercare la cronologia di un file specifico in un repository git per trovare una linea che è andata. Il messaggio di commit non avrà alcun testo rilevante su cui effettuare la ricerca. Che comando uso?Come si cerca la cronologia git per una riga scomparsa?

Ulteriori dettagli: questa è la cronologia della mia lista di cose da fare con il nostro software di tracciabilità delle attività non stellare. L'ho tenuto per due anni perché non ci sono abbastanza informazioni per me contenute nel software. I miei messaggi di commit di solito hanno solo gli ID delle attività, sfortunatamente, e quello che devo fare è trovare un'attività chiusa per argomento, non per numero. Sì, la vera soluzione è un software di tracciamento delle attività migliore, ma è completamente fuori dalle mie mani.

risposta

74

Questo è un lavoro per il piccone!

Dalla pagina man git-log:

-S<string>

cercare le differenze che presentano o rimuovere un'istanza di <string>. Si noti che questo è diverso rispetto alla stringa che appare semplicemente nell'output diff; vedi la voce piccone in gitdiffcore (7) per maggiori dettagli.

Naturalmente, è possibile utilizzare altre possibilità di restringere il campo, ad esempio:

git log -Sfoobar --since=2008.1.1 --until=2009.1.1 -- path_containing_change 

Non è che incredibilmente utile?

+9

Mi sento come se questa funzione da sola dovesse convertire le persone in git. +1 –

+1

Questo sembra fantastico, ma come funziona la parte path_contain_change? Quando lo aggiungo non ottengo alcun risultato ma senza di esso vedo i commit rilevanti. – Ibrahim

+1

@Ibrahim Forse un bug ... Vedo lo stesso comportamento che fai. Di solito collaudo le cose, ma questo era due anni fa quindi non ricordo per certo se l'ho testato o meno, dal momento che passando per la normale sintassi per git-log (e la pagina man), mi aspetterei che lavoro. In generale, l'aggiunta di un argomento di percorso come quello lo limita a commit che hanno influenzato tale percorso. – Cascabel

0

Che ne dici di git log --stat | grep 'filename' per iniziare a restringerlo?

+1

Non vedo alcuna indicazione che l'OP conosca il nome del file. Buon approccio in generale, però. Certo, puoi semplicemente fare 'git log filename'. – Cascabel

Problemi correlati