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 --follow
prace 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
).
--follow
odpowiada za zmianę nazwy, więc jest to bardziej niezawodne niżgit log -- path
--follow
akceptuje ś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 filename
nie śledzi zmiany nazwy pliku, tzn. Pokaże wszystkie zatwierdzenia dotyczące tej nazwy pliku (nie rzeczywisty plik). Jeśli utworzysz pliki, X
a Y
zmienisz oba, a następnie usuniesz Y
i zmienisz nazwę X
na, Y
a następnie zmienisz je i uruchomisz git log Y
, otrzymasz wiadomości zarówno dla starej, jak Y
i nowej . I odwrotnie, --follow
otrzymasz zatwierdzenia dotyczące tego pliku, gdy zostanie on nazwany X
i kiedy zostanie nazwany Y
.
git log path
powinien robić co chcesz. Od git log
męż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
--reflog
obejmuje 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 log
i 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 -- filename
lub po prostu użyć, git log --all -- filename
aby 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.
-p
jeśli chcesz zobaczyć pełną różnicę, nie tylko to, że zmodyfikowano pewną liczbę linii.
git show
konkretne 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 upperLimit
jest start_line_number
i lowerLimit
jestending_line_number
Więcej informacji - https://www.techpurohit.com/list-some-useful-git-commands
Jak zauważył jackrabb1t, --follow
jest 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 --follow
działa tylko dla jednego pliku.
--follow
dział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, filename
a 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.
gitk
jest 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 b7c4f0d7
jest 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>