Czy istnieje sposób, aby wyświetlić listę wszystkich zatwierdzeń, które zmieniły określony plik?
Czy istnieje sposób, aby wyświetlić listę wszystkich zatwierdzeń, które zmieniły określony plik?
Odpowiedzi:
Te --followprace dla danego pliku
git log --follow -- filename
Różnica w stosunku do innych podanych rozwiązań
Należy pamiętać, że inne rozwiązania obejmują git log path(bez --follow). Takie podejście jest przydatne, jeśli chcesz śledzić np. Zmiany w katalogu , ale potknie się przy zmianie nazwy plików (więc użyj --follow filename).
--followodpowiada za zmianę nazwy, więc jest to bardziej niezawodne niżgit log -- path
--followakceptuje ścieżkę , która może być plikiem, ale także katalogiem. W przypadku tego ostatniego będzie on działał rekurencyjnie i raportował zmiany we wszystkich plikach poniżej tego punktu. (To zachowanie nie jest udokumentowane na stronie podręcznika i może nie być trwałe.)
git log filename?
git log filenamenie śledzi zmiany nazwy pliku, tzn. Pokaże wszystkie zatwierdzenia dotyczące tej nazwy pliku (nie rzeczywisty plik). Jeśli utworzysz pliki, Xa Yzmienisz oba, a następnie usuniesz Yi zmienisz nazwę Xna, Ya następnie zmienisz je i uruchomisz git log Y, otrzymasz wiadomości zarówno dla starej, jak Yi nowej . I odwrotnie, --followotrzymasz zatwierdzenia dotyczące tego pliku, gdy zostanie on nazwany X i kiedy zostanie nazwany Y.
git log pathpowinien robić co chcesz. Od git logmężczyzny :
[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion with
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.
Patrzyłem na to uważnie i wydaje się, że wszystkie te odpowiedzi nie pokazują mi naprawdę wszystkich zobowiązań we wszystkich oddziałach.
Oto, co wymyśliłem, bawiąc się opcjami widoku edycji gitk. To pokazuje mi wszystkie zatwierdzenia dla pliku, niezależnie od oddziału, lokalnego, ponownego logowania i zdalnego.
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
Działa również z git log:
git log --all --first-parent --remotes --reflog --author-date-order -- filename
--reflogobejmuje zobowiązania, które zostały ponownie wprowadzone / zmienione lub w inny sposób odrzucone. Może to powinno być oczywiste, ale próbowałem to wykorzystać git logi starałem się zrozumieć, dlaczego widzę pozornie zduplikowane zatwierdzenia!
Użyj poniższego polecenia, aby uzyskać zatwierdzenia dla określonego pliku:
git log -p filename
git log -p mybranch -- filenamelub po prostu użyć, git log --all -- filenameaby przeglądać wszystkie gałęzie.
Powinno być tak proste, jak git log <somepath>; sprawdź stronę (git-log(1) ).
Osobiście lubię używać, git log --stat <path>aby zobaczyć wpływ każdego zatwierdzenia na plik.
-pjeśli chcesz zobaczyć pełną różnicę, nie tylko to, że zmodyfikowano pewną liczbę linii.
git showkonkretne zatwierdzenia, które wyglądają, jakby miały znaczenie.
Alternatywnie (od Gita 1.8.4) możliwe jest również pobranie wszystkich zatwierdzeń, które zmieniły określoną część pliku. Możesz to zrobić, przechodząc przez linię początkową i numer linii końcowej.
Zwrócony wynik to lista zatwierdzeń, które zmodyfikowały tę konkretną część. Polecenie wygląda następująco:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
gdzie upperLimitjest start_line_numberi lowerLimitjestending_line_number
Więcej informacji - https://www.techpurohit.com/list-some-useful-git-commands
Jak zauważył jackrabb1t, --followjest bardziej niezawodny, ponieważ nadal wymienia historię poza nazwami / ruchami. Tak więc, jeśli szukasz pliku, który nie znajduje się obecnie w tej samej ścieżce lub pliku, którego nazwa została zmieniona w różnych zatwierdzeniach, - śledzi go.
Może to być lepsza opcja, jeśli chcesz wizualizować zmiany nazwy / ścieżki:
git log --follow --name-status -- <path>
Ale jeśli chcesz mieć bardziej kompaktową listę zawierającą tylko to, co ważne:
git log --follow --name-status --format='%H' -- <path>
lub nawet
git log --follow --name-only --format='%H' -- <path>
Minusem jest to, że --followdziała tylko dla jednego pliku.
--followdziała dla pojedynczej ścieżki , która może być katalogiem. Jeśli przejdzie katalog, uruchomi się rekurencyjnie i zgłosi zmiany we wszystkich plikach poniżej tego punktu.
Jeśli chcesz wyświetlić wszystkie zatwierdzenia, które zmieniły plik, we wszystkich gałęziach użyj tego:
git log --follow --all <filepath>
Jeśli chcesz szukać wszystkich zatwierdzeń według, filenamea nie według filepath , użyj:
git log --all -- '*.wmv'
Jeśli chcesz zobaczyć wszystkie zmiany wprowadzone w zatwierdzeniach, które zmieniły konkretny plik (a nie tylko zmiany w samym pliku), możesz przekazać --full-diff:
git log -p --full-diff [branch] -- <path>
[branch]
gitk <path_to_filename>
Zakładając, że pakiet „gitk” jest już zainstalowany.
Jeśli nie jest zainstalowany, wykonaj następujące czynności:
sudo apt-get install gitk
A następnie wypróbuj powyższe polecenie. To jest dla Linuksa ... Może pomóc użytkownikom Linuksa, jeśli chcą GUI.
gitkjest on dołączony do Git dla Windows.
Aby uzyskać listę skrótów zatwierdzeń, użyj git rev-list
git rev-list HEAD <filename>
Wynik:
b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d
co oznacza, że 5 zatwierdzeń dotknęło tego pliku. Ma odwrotną kolejność chronologiczną, więc pierwsze zatwierdzenie na liście b7c4f0d7jest najnowsze.
W systemie Linux możesz do tego użyć gitk.
Można go zainstalować przy użyciu „sudo apt-get install git-gui gitk”. Może być używany do wyświetlania zatwierdzeń określonego pliku przez „gitk <nazwa_pliku>”.
# Shows commit history with patch
git log -p -<no_of_commits> --follow <file_name>
# Shows brief details like "1 file changed, 6 insertions(+), 1 deletion(-)"
git log --stat --follow <file_name>