Zobacz różnicę między aktualnym stanem a ostatnim zatwierdzeniem

93

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?

travis1097
źródło

Odpowiedzi:

113

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.

Klas Mellbourn
źródło
2
git diffporównuje drzewo robocze z indeksem, a nie HEAD.
Carlos Martín Nieto
@ CarlosMartínNieto Masz rację, sir. Poprawiłem swój post, aby to odzwierciedlić.
Klas Mellbourn
Uruchomiłem to, ale terminal się nie kończy, jak mogę wyjść.? nic nie działa.
Francisco Corrales Morales
@KlasMellbourn, czy można git diffwyświetlić stan indeksu i poprzednie zatwierdzenie w jednej wiadomości różnicowej?
alpha_989
2
Dobrze to rozgryzłem git diff --cached HEAD^:)
alpha_989
33

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.

tallamjr
źródło
3
Head-up dla Windows cmd w wersji git - musisz uciec od znaku daszka (^) samym daszkiem. Dlatego „git diff HEAD ^” powinno być „git diff HEAD ^^”. W ten sam sposób „HEAD ^^” należy wprowadzić jako „HEAD ^^^^”.
Eellor
1
W tej odpowiedzi myślę, że jest trochę niejasne, do czego odnosi się „ostatnie zatwierdzenie”. HEAD^jest zatwierdzeniem przed ostatnim zatwierdzeniem.
Klas Mellbourn
3

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.

Carlos Martín Nieto
źródło
3

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

dekdev
źródło
2

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:

https://git-scm.com/docs/gitrevisions

Martin Flaska
źródło