2015-02-27 5 views
5

Stiamo utilizzando un flusso di lavoro in stile git-flow e vogliamo scoprire quale richiesta di pull include le modifiche a una determinata riga di codice.Trova il commit unione che ha modificato una determinata linea?

Supponiamo di avere la seguente storia:

 c---e---g 
    /  \ 
-a---b---d---f---h--- master 

La mia richiesta di pull è stata fusa in h con messaggio di commit "Unisci richiesta di pull # 123".

Se faccio una colpa git sulle linee del codice aggiunto nella richiesta pull, mi mostra e, anziché h.

12345678 (Wilfred Hughes   2015-02-02 15:22:40 +0000 402) # Some old code 
e  (Wilfred Hughes   2015-02-12 15:22:40 +0000 402) # Added in the PR, line 1 
e  (Wilfred Hughes   2015-02-12 15:22:40 +0000 403) # Added in the PR, line 2 
56789012 (Wilfred Hughes   2015-02-26 17:24:18 +0000 404) # More old code 

Come posso trovare il commit di unione per una data riga di codice in git?

(Nota questo è diverso da this related question poiché sto iniziando con linee di codice, non commit).

+0

hai provato 'git log --reverse --merges --topo-ordine ..'? La prima voce dovrebbe corrispondere al commit 'h'. – Jubobs

+0

potresti usare questa domanda http://stackoverflow.com/q/8475448/2082964: come trovare l'unione dopo un certo commit –

risposta

2

Un merge-commit apparirebbe solo in git-bame se aveste risolto il conflitto in quel commit.

Per unioni normali senza conflitti, h sarebbe mai apparire in git colpa in quanto non ha cambiato in alcun riga di codice e semplicemente fusa g e f.

Quindi, ciò che si vuole può essere realizzato in 2 fasi

  1. In primo luogo trovare che impegnano la linea impatto di codice che ti interessa. Ciò può essere ottenuto opzione git colpa -L via (è disponibile in git 1.8. 4). Fornisci un intervallo di oltre 10 linee perché è probabile che il numero esatto della linea sia stato modificato.

    $ git colpa -L200, + 10 - filename.ext

  2. Trova il primo merge commit dopo il commit trovato nel passaggio 1 Quindi si dovrebbe trovare prima che impegnano influenzato la linea di codice che interessa. Ciò può essere ottenuto come risposta a Find merge commit which include a specific commit