Czasami, kiedy mam zamiar dokonać zatwierdzenia, nie pamiętam dokładnie, co się zmieniło od ostatniego zatwierdzenia. Jak mogę zobaczyć różnicę między bieżącym stanem kodu a ostatnim zatwierdzeniem?
Czasami, kiedy mam zamiar dokonać zatwierdzenia, nie pamiętam dokładnie, co się zmieniło od ostatniego zatwierdzenia. Jak mogę zobaczyć różnicę między bieżącym stanem kodu a ostatnim zatwierdzeniem?
Odpowiedzi:
Jeśli nie dodałeś jeszcze żadnych plików do indeksu (za pomocą git add), po prostu zrób
git diff
To pokaże różnicę między twoim drzewem roboczym a indeksem.
Jeśli dodałeś pliki do indeksu, musisz to zrobić, aby pokazać różnice między indeksem a ostatnim zatwierdzeniem (HEAD).
git diff --cached
Wreszcie, jeśli chcesz zobaczyć zmiany dokonane w drzewie roboczym w porównaniu z ostatnim zatwierdzeniem ( HEAD), możesz (jak wskazuje Carlos) zrobić
git diff HEAD
Te zmiany są połączeniem git diffi git diff --cached.
git diffwyświetlić stan indeksu i poprzednie zatwierdzenie w jednej wiadomości różnicowej?
git diff --cached HEAD^:)
Jeśli właśnie wykonałeś zatwierdzenie lub chcesz zobaczyć, co zmieniło się w ostatnim zatwierdzeniu w porównaniu z obecnym stanem (zakładając, że masz czyste drzewo robocze), możesz użyć:
git diff HEAD^
Spowoduje to porównanie HEAD z zatwierdzeniem bezpośrednio poprzedzającym. Można też to zrobić
git diff HEAD^^
porównać ze stanem 2 zatwierdzeń temu. Aby zobaczyć różnicę między bieżącym stanem a pewnym zatwierdzeniem, po prostu wykonaj:
git diff b6af6qc
Gdzie b6af6qcjest przykład skrótu zatwierdzenia.
HEAD^jest zatwierdzeniem przed ostatnim zatwierdzeniem.
Pytasz git o porównanie aktualnego / ostatniego zatwierdzenia, które ma skrót HEAD.
Więc git diff HEADporówna bieżący stan drzewa roboczego z bieżącym zatwierdzeniem.
pokazuje to również różnicę i jakie pliki zostały zmienione / zmodyfikowane.
$ git status
Wyświetla ścieżki, które mają różnice między plikiem indeksu a bieżącym zatwierdzeniem HEAD, ścieżki, które mają różnice między drzewem roboczym a plikiem indeksu oraz ścieżki w drzewie roboczym, które nie są śledzone przez git (i nie są ignorowane przez gitignore (5) ). Pierwszą jest to, co byś zrobił, uruchamiając git commit; druga i trzecia to to, co możesz zatwierdzić, uruchamiając git add przed uruchomieniem git commit.
https://www.kernel.org/pub/software/scm/git/docs/git-status.html
To działa również dla mnie:
# The last one
git diff HEAD~1 HEAD
# The last but one, etc...
git diff HEAD~2 HEAD~1
Zwykle działa to w przypadku historii liniowej. Może to być trudniejsze, jeśli istnieją również zatwierdzenia scalające. Polecam zajrzeć do tego dokumentu, aby uzyskać ładne i kompletne wyjaśnienie, zwłaszcza ten przykład drzewa zmian:
git diffporównuje drzewo robocze z indeksem, a nie HEAD.