Jak grep git commit diffs lub zawartość dla danego słowa?
W repozytorium kodu Git chcę wyświetlić listę wszystkich commitów, które zawierają określone słowo. Próbowałem tego
git log -p | grep --context=4 "word"
Ale nie musi mi zwracać nazwy pliku (chyba, że jest mniej niż 5 wiersze z dala od słowa, którego szukałem. Próbowałem też
git grep "word"
Ale daje mi tylko obecne pliki, a nie historię.
Jak przeszukać całą historię, aby śledzić zmiany w danym słowie? Mam na myśli przeszukanie mojej bazy kodowej pod kątem wystąpień słowa, aby wyśledzić zmiany (szukaj w historii plików).
8 answers
Jeśli chcesz znaleźć wszystkie commity, w których commit message zawiera podane słowo, użyj
$ git log --grep=word
Jeśli chcesz znaleźć wszystkie commity, w których "słowo "zostało dodane lub usunięte w zawartość pliku (dokładniej: gdzie liczba wystąpień" słowa " się zmieniła), np. przeszukaj zawartość , użyj tzw.]}
$ git log -Sword
W nowoczesnym git istnieje również
$ git log -Gword
Aby szukać różnic których dodana lub usunięta linia pasuje do "Worda" (również Zatwierdź zawartość ).
Zauważ, że -G
domyślnie akceptuje wyrażenia regularne, podczas gdy -S
akceptuje ciąg znaków, ale można go zmodyfikować, aby zaakceptować wyrażenia regularne za pomocą --pickaxe-regex
.
Aby zilustrować różnicę pomiędzy
-S<regex> --pickaxe-regex
i-G<regex>
, rozważ commit z następującym różnicowaniem w tym samym pliku:+ return !regexec(regexp, two->ptr, 1, ®match, 0); ... - hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
Podczas gdy
git log -G"regexec\(regexp"
pokaże ten commit,git log -S"regexec\(regexp" --pickaxe-regex
nie pokaże (ponieważ liczba wystąpień tego ciągu nie uległa zmianie).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-16 21:45:13
git log
's kilof znajdzie commity ze zmianami, w tym "word" z git log -Sword
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-10 11:51:35
Po wielu eksperymentach, mogę polecić następujące, które pokazuje commity, które wprowadzają lub usuwają linie zawierające dane wyrażenie regularne, i wyświetla zmiany tekstu w każdym z nich, z kolorami pokazującymi słowa dodane i usunięte.
git log --pickaxe-regex -p --color-words -S "<regexp to search for>"
/ Align = "left" / .. ;-)Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-04 16:12:44
Jeszcze jeden sposób / składnia to: git log -S "word"
W ten sposób możesz wyszukać na przykład git log -S "with whitespaces and stuff @/#ü !"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 23:03:57
Możesz wypróbować następujące polecenie:
git log --patch --color=always | less +/searching_string
Lub używając grep
w następujący sposób:
git rev-list --all | GIT_PAGER=cat xargs git grep 'search_string'
Uruchom to polecenie w katalogu nadrzędnym, w którym chcesz wyszukać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-17 09:53:44
Aby użyć łącznika boolean w wyrażeniu regularnym:
git log --grep '[0-9]*\|[a-z]*'
To wyrażenie regularne wyszukuje wyrażenia regularne [0-9] * lub [a-Z]* w wiadomościach commit.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-30 20:18:11
Vim-fugitive jest uniwersalny do tego typu badań w Vim.
Użyj :Ggrep
, aby to zrobić. Aby uzyskać więcej informacji, możesz zainstalować vim-fugitive i sprawdzić turorial przez :help Grep
. A ten odcinek: odkrywanie-historii-git-repozytorium poprowadzi cię do tego wszystkiego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-09 06:49:20
Jeśli chcesz wyszukać wrażliwe dane, aby usunąć je z historii Gita( co jest powodem, dla którego wylądowałem tutaj), są do tego narzędzia. Github jako dedykowana strona pomocy dla tego problemu .
Oto treść artykułu:
BFG Repo-Cleaner jest szybszą i prostszą alternatywą dla git filter-branch do usuwania niechcianych danych. Na przykład, aby usunąć plik z poufnymi danymi i pozostawić najnowszy commit nietknięty), run:
bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA
Aby zastąpić wszystkie teksty wymienione w hasłach.txt wszędzie tam, gdzie można go znaleźć w historii repozytorium, Uruchom:
bfg --replace-text passwords.txt
Aby uzyskać pełne instrukcje użytkowania i pobierania, zapoznaj się z dokumentacją BFG Repo-Cleaner .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-27 20:33:36