2012-12-14 14 views
10

Mam fragment kodu w innym niż moja obecna gałąź w repozytorium git i nie jestem pewien, które zatwierdzenie i która gałąź. Jak mogę przeszukać wszystkie pliki, które do tej pory zatwierdziłem dla określonego ciągu znaków (a następnie pokazać otoczenie tego wiersza kodu)?Git-Repo wyszukuje ciąg we wszystkich zatwierdzonych plikach (nieznana gałąź i zatwierdzenie)

+0

Możliwy duplikat: http://stackoverflow.com/questions/ 746684/how-to-search-through-all-commit-in-the-repository –

Odpowiedz

11

Zastosowanie git grep zlokalizować commit:

git grep "string" $(git rev-list --all) 

git rev-list --all pozwala przeszukiwać całą historię projektu.

To da wyjście takiego:

<commit>:<path>:<matched line> 

Następnie można użyć git branch --contains aby dowiedzieć się, który oddział commit jest:

git branch --contains <commit> 
+0

Czy mogę określić, aby wyszukiwać tylko w jednym pliku/ścieżce? (Np. Szukam określonego urządzenia i chcę tylko szukać w tej ścieżce) –

+1

Tak: 'git grep" string "$ (git rev-list --all) - path'. – jszakmeister

+7

to nie działa dla wielkich historii: ( 'git grep 'abc' echo $ (git rev-list - all)' 'zsh: lista argumentów za długa: git' – tback

1

zmienić oddział za pomocą git branch "branch-name", a następnie wykonać git grep "specific string" w katalogu głównym repozytorium. jeśli nie masz zbyt wielu oddziałów, to powinno tam być wystarczająco szybko.

1

Jeśli zmienność git grep "string" powyżej daje Ci " lista zbyt długich "błędów, możesz zamiast tego użyć git log -S. Opcja -S przeszukuje zawartość plików, które zostały popełnione: (. Więcej w książce "Pro Git" pod "searching")

git log -Sstring # look for string in every file of every commit 
git log -Sstring -- path/to/file # only look at the history of the named file 

Powiązane problemy