Jak mogę wyświetlić historię zmian pojedynczego pliku w Git, uzupełnić szczegóły o to, co się zmieniło?
Dotarłem do:
git log -- [filename]
która pokazuje mi historię zatwierdzeń pliku, ale jak mogę uzyskać treść każdej zmiany pliku?
Usiłuję dokonać przejścia z MS SourceSafe i kiedyś było to proste right-click
→ show history
.
Odpowiedzi:
Do tego użyłbym:
lub śledzić nazwy poprzednich nazw plików
źródło
Możesz użyć
aby git wygenerował łatki dla każdego wpisu dziennika.
Widzieć
więcej opcji - może zrobić wiele fajnych rzeczy :) Aby uzyskać tylko różnicę dla konkretnego zatwierdzenia, możesz
lub jakakolwiek inna zmiana według identyfikatora. Albo użyj
przeglądać zmiany wizualnie.
źródło
git log --follow -p -- path-to-file
Spowoduje to wyświetlenie całej historii pliku (w tym historii bez zmian nazw i różnic dla każdej zmiany).
Innymi słowy, jeśli nazwany plik
bar
został kiedyś nazwanyfoo
, wówczasgit log -p bar
(bez--follow
opcji) pokaże historię pliku tylko do momentu, w którym jego nazwa została zmieniona - nie pokaże historii pliku, gdy był znany jakofoo
. Użyciegit log --follow -p bar
spowoduje wyświetlenie całej historii pliku, w tym wszelkich zmian w pliku, gdy był znany jakofoo
. Ta-p
opcja zapewnia uwzględnienie różnic dla każdej zmiany.źródło
--follow
zapewnia, że widzisz nazwy plików (2.)-p
zapewnia, że widzisz, jak plik się zmienia (3.) jest to tylko wiersz poleceń.--
został dodany, ale nie wiem, dlaczego to sprawia, że najlepiej? Co to robi?--
Opcja mówi Gitowi , że osiągnęła koniec opcji i że wszystko, co następuje,--
powinno być traktowane jako argument. Nagit log
to tylko czyni żadnej różnicy jeśli masz ścieżkę, która rozpoczyna się w desce rozdzielczej . Powiedzmy, że chcesz poznać historię pliku o niefortunnej nazwie „- obserwuj”:git log --follow -p -- --follow
--
jest przydatny, ponieważ może również chronić przedrevision
nazwami pasującymi do wprowadzonej nazwy pliku, co może być przerażające. Na przykład: Jeśli masz zarówno gałąź, jak i plik o nazwiefoo
,git log -p foo
pokaże historię dziennika git dofoo
, a nie historię plikufoo
. Ale @DanMoulding ma rację, ponieważ ponieważ--follow
polecenie przyjmuje jako argument tylko jedną nazwę pliku, jest to mniej konieczne, ponieważ nie może byćrevision
. Właśnie się tego nauczyłem. Może wtedy miałeś rację, pomijając to; Nie jestem pewny.Jeśli wolisz pozostać oparty na tekście, możesz użyć tig .
Szybka instalacja:
# apt-get install tig
$ brew install tig
Użyj go, aby wyświetlić historię jednego pliku:
tig [filename]
lub przeglądaj szczegółową historię repozytoriów:
tig
Podobne do
gitk
opartego na tekście. Obsługuje kolory w terminalu!źródło
tig -- path/to/specific/file
git whatchanged -p filename
jest również równoważnegit log -p filename
w tym przypadku.Możesz również zobaczyć, kiedy określony wiersz kodu w pliku został zmieniony za pomocą
git blame filename
. Spowoduje to wydrukowanie krótkiego identyfikatora zatwierdzenia, autora, znacznika czasu i pełnego wiersza kodu dla każdego wiersza w pliku. Jest to bardzo przydatne po znalezieniu błędu i chcesz wiedzieć, kiedy został wprowadzony (lub kto to był błąd).źródło
filename
nie jest opcjonalny w poleceniugit blame filename
.Użytkownicy SourceTree
Jeśli korzystasz z SourceTree do wizualizacji swojego repozytorium (jest darmowe i całkiem dobre), możesz kliknąć plik prawym przyciskiem myszy i wybrać Log Selected
Wyświetlacz (poniżej) jest o wiele bardziej przyjazny niż gitk i większość innych wymienionych opcji. Niestety (w tej chwili) nie ma łatwego sposobu na uruchomienie tego widoku z wiersza poleceń - CLI SourceTree właśnie otwiera repozytorium.
źródło
Aby pokazać, która wersja i autor ostatnio zmodyfikowali każdą linię pliku:
lub jeśli chcesz użyć potężnego interfejsu graficznego:
źródło
Podsumowanie innych odpowiedzi po ich przeczytaniu i zagraniu:
Zwykłym poleceniem z wiersza poleceń byłoby
Ale możesz także użyć gitk (gui) lub tig (text-ui), aby uzyskać znacznie bardziej czytelne dla człowieka sposoby patrzenia na to.
W debian / ubuntu polecenie instalacji tych pięknych narzędzi jest zgodne z oczekiwaniami:
I obecnie używam:
więc mogę po prostu pisać,
gdf dir
aby uzyskać skoncentrowaną historię wszystkiego w podkatalogudir
.źródło
--all
dotyczy wszystkich gałęzi, pozostałe wyjaśniono w odpowiedzi @ DanaDodaj ten alias do .gitconfig:
I użyj następującego polecenia:
Wyjście będzie wyglądało prawie dokładnie tak samo jak wyjście gitk. Cieszyć się.
źródło
git lg -p filename
- zwraca piękną różnicę szukanego pliku.Ostatnio odkryłem
tig
i uznałem, że jest to bardzo przydatne. Są przypadki, w których chciałbym, żeby to zrobił A lub B, ale przez większość czasu jest raczej schludnie.W twoim przypadku
tig <filename>
może być to, czego szukasz.http://jonas.nitro.dk/tig/
źródło
Możesz używać vscode z GitLens , jest to bardzo potężne narzędzie. Po zainstalowaniu GitLens przejdź do karty GitLens, wybierz
FILE HISTORY
i możesz ją przeglądać.źródło
W tym celu napisałem git-odtwarzanie
Ma to tę zaletę, że wyświetla wyniki w wierszu poleceń (jak
git log -p
), a jednocześnie umożliwia przejście przez każdy zatwierdzenie za pomocą klawiszy strzałek (jakgitk
).źródło
Lub:
gitx -- <path/to/filename>
jeśli używasz gitx
źródło
Jeśli chcesz zobaczyć całą historię pliku, w tym we wszystkich innych gałęziach, użyj:
źródło
Możesz także spróbować tego, który wyświetla zatwierdzenia, które zmieniły określoną część pliku (zaimplementowane w Git 1.8.4).
Zwrócony wynik to lista zatwierdzeń, które zmodyfikowały tę konkretną część. Komenda :
gdzie upperLimit to numer_początkowy, a lowerLimit to numer_początkowy pliku.
Więcej szczegółów na https://www.techpurohit.com/list-some-useful-git-commands
źródło
Dzięki doskonałym rozszerzeniom Git przejdziesz do punktu w historii, w którym plik nadal istniał (jeśli został usunięty, w przeciwnym razie po prostu przejdź do HEAD), przejdź do
File tree
karty, kliknij plik prawym przyciskiem myszy i wybierzFile history
.Domyślnie następuje zmiana nazwy pliku, a
Blame
zakładka pozwala zobaczyć nazwę w danej wersji.Ma kilka drobnych błędów, takich jak pokazywanie
fatal: Not a valid object name
naView
karcie po kliknięciu wersji usuwania, ale mogę z tym żyć. :-)źródło
Jeśli używasz git GUI (w systemie Windows) w menu Repozytorium, możesz użyć „Wizualizacji historii mistrza”. Zaznacz zatwierdzenie w górnym panelu i plik w prawym dolnym rogu, a zobaczysz różnicę dla tego zatwierdzenia w lewym dolnym rogu.
źródło
SmartGit :
źródło
Odpowiedź, której szukałem, ale nie w tym wątku, to zobaczyć zmiany w plikach, które przygotowałem do zatwierdzenia. to znaczy
źródło
git diff origin/master
aby pokazać pełne różnice między oddziałem lokalnym a oddziałem głównym (które można zaktualizować zdalnie przezgit fetch
)Jeśli używasz TortoiseGit, powinieneś być w stanie kliknąć plik prawym przyciskiem myszy i zrobić
TortoiseGit --> Show Log
. W wyskakującym oknie upewnij się, że:'
Show Whole Project
' opcja nie jest zaznaczona.'
All Branches
' opcja jest zaznaczona.źródło
git diff -U <filename>
dać ci zunifikowaną różnicę.Powinien być zabarwiony na czerwono i zielono. Jeśli nie, uruchom:
git config color.ui auto
najpierw.źródło
Jeśli używasz Eclipse z wtyczką git, ma doskonały widok porównania z historią. Kliknij plik prawym przyciskiem myszy i wybierz „porównaj z” => „historia”
źródło
Prawdopodobnie wiem, gdzie był OP, kiedy to się zaczęło, szukając czegoś prostego, co pozwoliłoby mi użyć git difftool z vimdiff do przeglądu zmian w plikach w moim repozytorium, zaczynając od określonego zatwierdzenia. Nie byłem zbyt zadowolony z odpowiedzi, które znalazłem, więc rzuciłem razem ten skrypt git incremental rep orter (gitincrep) i było to dla mnie przydatne:
Wywoływany bez argumentów, rozpocznie się od początku historii repo, w przeciwnym razie rozpocznie się od skróconego skrótu zatwierdzenia, który podasz i przejdziesz do teraźniejszości - możesz w każdej chwili wyjść z Ctrl-C. Wszelkie argumenty po pierwszym ograniczą raporty różnic, aby zawierały tylko pliki wymienione wśród tych argumentów (myślę, że tego właśnie chciał OP i zalecałbym dla wszystkich oprócz drobnych projektów). Jeśli sprawdzasz zmiany w określonych plikach i chcesz zacząć od początku, musisz podać pusty ciąg dla arg1. Jeśli nie jesteś użytkownikiem vima, możesz go wymienić vimdiff swoim ulubionym narzędziem do porównywania .
Zachowanie polega na wyświetlaniu komentarzy zatwierdzania po znalezieniu odpowiednich zmian i rozpoczęciu oferowania uruchomień vimdiff dla każdego zmienionego pliku (to znaczy zachowanie git difftool , ale działa tutaj).
Takie podejście jest prawdopodobnie dość naiwne, ale przeglądając wiele rozwiązań tutaj i na powiązany post, wielu z nich wymagało zainstalowania nowych narzędzi w systemie, w którym nie mam dostępu administratora, z interfejsami o własnej krzywej uczenia się. Powyższy skrypt zrobił to, co chciałem, bez zajmowania się tym. Przejrzę tutaj wiele doskonałych sugestii, gdy będę potrzebować czegoś bardziej wyrafinowanego - ale myślę, że to bezpośrednio reaguje na PO.
źródło
Znalazłem bardzo proste rozwiązanie, aby szybko znaleźć historię pliku.
Pokazuje historię wszystkich zobowiązań.
źródło