2012-12-03 20 views
31

E 'possibile in qualche modo che GIT trovi quale commit ha introdotto una specifica riga di codice in un file specifico? Questo presuppone che ci siano stati molti commit da quando è stata aggiunta questa linea. O è questo qualcosa che deve essere fatto in uno script mentre si guarda la colpa git di tutti i commit per il file in cui è presente la linea?Git blame commit line

Per chiarire file-

originale> Linea Aggiunto su file e commesso -> Molti altri commit aggiungendo altre linee e modificando il codice

risposta

29

è possibile utilizzare git blame -l filename per ottenere il numero SHA1 quando la linea è stata modificata

è anche possibile utilizzare --reverse:

--reverse

storia camminare in avanti invece che all'indietro. Invece di mostrare la revisione in cui è apparso una linea, questo mostra l'ultima revisione in cui è esistita una linea. Ciò richiede una serie di revisioni come START..END dove il percorso per la colpa esiste in START.

vedere http://www.kernel.org/pub/software/scm/git/docs/git-blame.html

+0

Questo mi sta portando nella giusta direzione. sembra che L sia un argomento per git bias che permetterebbe di tracciare una linea o un range di linee. Indagherò un po 'di più e pubblicherò i miei risultati. –

+0

vedere la mia modifica è possibile utilizzare il contrario e -L per l'intervallo, quindi si ottiene il commit – phschoen

+0

Utilizzo -L trovato il commit in alto. Se usassi --verse, sono sicuro che sarebbe d'aiuto. Grazie. –

2

Supponendo che la linea non è cambiata dal momento che è stato aggiunto, poi Semplicemente:

git blame <that file> e poi cerca la linea che cerchi.

Se la linea è stato modificato dopo che è stato aggiunto, è ancora possibile git blame a scoprire la ultima commit su cui la linea è stata alterata, e quindi git checkout <sha>~1 (dove sha sono il CSA che si presenta in originale git blame) e git blame di nuovo per tornare indietro nella cronologia di quella linea.

+0

Ho aggiunto il chiarimento sopra. Voglio trovarlo dopo che sono stati fatti molti commit. Altrimenti, devo solo dare la colpa a te, come hai detto tu. –

+0

Questo non sembra che mi avrebbe dato il commit in particolare che ha introdotto la linea. Piuttosto, dovrei usare la colpa di git per iterare trovandolo da solo. Speravo che il GIT sarebbe stato in grado di trovarlo per me. –

+0

Non conosco altro modo se non quello di "git blame" quel file continuamente e di trovare la linea manualmente. Non credo che Git abbia un modo per farlo automaticamente. –

0

Sembra si può usare git log -L per controllare file. Per esempio, voglio controllare i commit per file.c, la linea 55-60:

git log -L55,60:file.c 
2

si può incolpare contro la stringa di codice specifico come questo.

git log -S 'THE-CODE'