2012-06-17 12 views
18

Próbuję szukać zmian w mojej historii git związanych z bardzo konkretną nazwą zmiennej.Git przeszukuje wszystkie diffs

Próbowałem w ten sposób:

git diff HEAD~25000 | grep -in mydistinctvariablename 

Wyniki nie mów mi, które zobowiązują linie wynikowe są od i zajmuje sporo czasu (około 5-7 minut).

Czy ktoś ma lepsze rozwiązanie, czas i wyniki mądre?

+2

możliwy duplikat [Jak grep (szukaj) historii git?] (Http://stackoverflow.com/questions/2928584/how-to-grep-search-the-git-history) –

+0

Hmm żaden z tych Polecenia powiedz mi, z której wersji pochodzi wynik wyszukiwania, a tylko plik, który nastąpił w przypadku zmiany –

+0

. Dla mnie jest to SHA przed nazwą pliku w wynikach. Użyłem pierwszego polecenia w pierwszej odpowiedzi. Odpowiedź [druga odpowiedź] (http://stackoverflow.com/a/2928721/211563) jest prawdopodobnie więcej, czego szukasz, a także daje SHA (pod warunkiem, że format dziennika pokazuje to). –

Odpowiedz

27

git log jest ogólnie polecenie używać podczas rozpatrywania popełnić historię. git log --grep można użyć do wyszukiwania wyrażeń regularnych w wiadomości zatwierdzenia.

Co jesteś po to git log -S który przeszukuje zawartość popełnienia lub po prostu git log -G który przeszukuje go z wyrażenia regularnego:

-S Look różnic, które wprowadzają lub usunąć instancję. Zauważ, że jest to coś innego niż string pojawiający się po prostu na wyjściu diff; zobacz wpis kilofa w gitdiffcore (7) po więcej szczegółów.

Tak więc, na przykład, w repozytorium msysgit mogę znaleźć zobowiązują się, że wprowadzono Tcl 8.5.8 przy użyciu:

C:\src\msysgit\src>git log --oneline --grep "8\.5\.8" 
d938476 Make `NO_SFX=1 portable-release.sh` work 
ef1dc94 Update tk to version 8.5.8 
a910049 Update tcl to version 8.5.8 
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list 

który właśnie szukał 8.5.8 w komunikatach popełnienia lub jak chce zrobić patrząc na sznurku, które wystąpiły tylko w zaangażowanej diff:

C:\src\msysgit\src>git log --oneline -S"version=8.5.8" 
7be8622 tcltk: update release.sh script for tcl/tk 8.5.9 
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list 

zakresie ograniczania masz w próbce może być nadal używane tutaj do ograniczenia zobowiązuje się do zbadania. Przeczytaj uważnie instrukcję obsługi git, aby uzyskać dobry obraz wszystkich rzeczy, które może zrobić.

Zauważ, że -S prostu szuka prostych różnic String - jeśli naprawdę chcesz, aby przeszukać zawartość za pomocą wyrażenia regularnego podobny do ciebie przykład należy użyć opcji zamiast -S-G ale to będzie znacznie wolniejsze.

+0

Gdybym może, w pierwszym fragmencie, linia 'd938476 Bądź \' NO_SFX = 1 portable-release.sh \ 'work' jest mylące, jak wskazówki, że pierwszy fragment jest co drugi (innymi słowy, myślę, że byłoby jaśniej, gdyby ta linia została usunięta z przykładowego wyjścia ...) – acdcjunior

Powiązane problemy