2012-12-03 11 views
31

Czy GIT może w jakiś sposób znaleźć, które zatwierdzenie wprowadziło określony wiersz kodu w określonym pliku? Zakłada się, że od dodania tej linii nastąpiło wiele zatwierdzeń. Czy jest to coś, co musi być zrobione w scenariuszu, gdy patrzy się na winę za wszystkie zatwierdzenia dla pliku, w którym jest obecna linia?Zgłoszona linia Git

Aby wyjaśnić

oryginalny Plik-> Linia dodane do pliku i zaangażowana -> Wiele innych commity dodanie innych linii i zmiany kodu

Odpowiedz

29

można użyć git blame -l filename aby uzyskać numer SHA1 gdy linia została zmieniona

można również skorzystać --reverse:

--reverse

historię Spacer do przodu zamiast do tyłu. Zamiast pokazywać wersję, w której pojawiła się linia, pokazuje ona ostatnią wersję, w której istniała linia. Wymaga to szeregu poprawek, takich jak START..END, gdzie ścieżka do winy istnieje w START.

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

+0

To prowadzi mnie we właściwym kierunku. wydaje się, że L jest argumentem przeciwko git winy, który pozwoliłby na śledzenie linii lub zakresu linii. Zbadam jeszcze trochę i opublikuję moje wnioski. –

+0

zobacz moją edycję można użyć odwrotności i -L dla zakresu, a następnie uzyskać zatwierdzenie – phschoen

+0

Korzystanie z -L znaleźć zatwierdzenie na górze. Jeśli użyłbym -reverse, na pewno też by to pomogło. Dzięki. –

2

Zakładając, że linia nie zmieniła się, ponieważ został dodany, a następnie po prostu:

git blame <that file> a następnie poszukaj linii, której szukasz.

Jeśli linia została zmodyfikowana, ponieważ został dodany, można jeszcze git blame aby dowiedzieć się ostatni popełnić na którym linia została zmieniona, a następnie git checkout <sha>~1 (gdzie sha jest sha, który pojawia się w oryginalnym git blame) i git blame ponownie, aby wrócić do historii dla tej linii.

+0

Dodałem wyjaśnienie powyżej. Chcę go znaleźć po wielu zobowiązaniach. W przeciwnym razie po prostu git winę, jak powiedziałeś. –

+0

To nie wygląda na to, że dałoby mi wyraźne zobowiązanie do wprowadzenia linii. Przeciwnie, musiałbym użyć git win do iteracji znalezienia go samemu. Miałem nadzieję, że GIT będzie w stanie znaleźć to dla mnie. –

+0

Nie znam innego sposobu niż "git win", który plik ciągle i znaleźć linię ręcznie. Nie sądzę, że Git ma sposób robienia tego automatycznie. –

0

Wydaje można użyć dziennika git -L sprawdzić plik. Na przykład, chcę sprawdzić, zobowiązuje do file.c linii od 55 do 60:

git log -L55,60:file.c 
2

można winić przeciwko konkretnej sekwencji kodowej takiego.

git log -S 'THE-CODE'