Więc jeśli mam plik o nazwie foo.rb i powoduje on błąd związany z brakującą metodą o nazwie bar , chcę przeszukać historię foo.rb w poszukiwaniu ciągu, bar
aby sprawdzić, czy został on kiedykolwiek zdefiniowany w przeszłości.
Znalazłem to Przeszukaj całą historię Git w poszukiwaniu ciągu?
Ale to przeszukuje wszystkie pliki. Chcę tylko wyszukiwać w jednym pliku.
-- filename
do kilku poleceń git, jeśli chcesz ograniczyć je do jednego pliku.Odpowiedzi:
W tym celu możesz użyć opcji -S do git log:
źródło
git log -G'bar' -- foo.rb
poszukać diff, który zawiera „bar”, zamiast zatwierdzeń zmieniających liczbę wystąpień „bar” (zobacz stronę podręcznika git-log).-Sbar
, aby wyszukać pasek . Może ma to coś wspólnego ze mną za pomocą wiersza poleceń systemu Windows.-G
służy do wyszukiwania wyrażeń regularnych ... to też jest świetne odniesienie: stackoverflow.com/a/4472267/2586761A może możesz spróbować tego (z pokrewnych pytań Przeszukaj całą historię git dla ciągu )
W rzeczywistości będzie szukał zawartości pliku i nie będzie zatwierdzał komunikatów / poprawek w przypadku wystąpienia baru.
źródło
for /F %i in ('git rev-list --all foo.rb') git grep -F bar %i foo.rb
(uważaj na podwójne cudzysłowy, jeśli nazwa pliku lub wyszukiwana fraza zawiera spacje)for /F %i in ('git rev-list --all foo.rb') do git grep -F bar %i foo.rb
(uważaj na podwójne cudzysłowy, jeśli nazwa pliku lub wyszukiwana fraza zawiera spacje)Istnieje przesłonięcie dla polecenia git log (z instrukcji ):
Możesz więc użyć:
źródło
--full-diff
nie działa (jak w, nie widać różnicy) bez-p
, przynajmniej na git 1.7.9.5Użyłem,
git log -S "string" --follow -p "path of file"
który pokazuje pełną historię wszystkich zmian z tym ciągiem.źródło