Jak zobaczyć zmiany w Git commit?


Odpowiedzi:


1970

Aby zobaczyć różnicę dla określonego COMMITskrótu:

git diff COMMIT~ COMMITpokaże ci różnicę między COMMITprzodkiem tego a COMMIT. Zobacz strony man dla git diff, aby uzyskać szczegółowe informacje na temat polecenia i gitrevisions na temat ~notacji i jej przyjaciół.

Alternatywnie git show COMMITzrobi coś bardzo podobnego. (Dane zatwierdzenia, w tym jego różnice - ale nie dla zatwierdzeń scalania.) Zobacz stronę man git show .


17
Należy pamiętać, że ^należy cytować w skorupach Thomsona i Bourne'a (synonim |tam) i rcjego pochodnych (operator karetki) oraz w zshwłączonej rozszerzonej notglobie ( operator globowania)
Stephane Chazelas

3
Zauważ, że HEAD^implikuje to pierwszy rodzic, jeśli zatwierdzenie ma wielu rodziców (tj. Scalenie zatwierdzenia).
Mansour

23
git diff COMMIT~ COMMITdziała dla mnie, zauważ tyldę zamiast karetki. Używam gita w wersji 2.6.1.windows.1 na Windows 10.
Juuso Ohtonen

14
@tradetree: słowo COMMIT należy zastąpić nazwą jakiegoś zatwierdzenia, np. suma SHA.
Nick Matteo

91
Wydaje mi się, że git show jest bardziej odpowiedni do tego pytania i powinien być pierwszą sugestią wspomnianą wcześniej.
pypmannetjies

496

Jak wspomniano w „ Skrót dla różnic git commit z rodzicem? ”, Możesz również używać git diffz:

git diff COMMIT^!

lub

git diff-tree -p COMMIT

W przypadku git show musisz (aby skupić się na samym diff) wykonać:

git show --color --pretty=format:%b $COMMIT

Ten COMMITparametr to zatwierdzenie :

Obiekt zatwierdzenia lub obiekt, który można rekurencyjnie odnieść do obiektu zatwierdzenia. Poniżej przedstawiono wszystkie zatwierdzenia: obiekt zatwierdzenia, obiekt znacznika, który wskazuje na obiekt zatwierdzenia, obiekt znacznika, który wskazuje na obiekt znacznika, który wskazuje na obiekt zatwierdzenia itp.

Zobacz gitrevision „OKREŚLANIE ZMIAN”, aby odwołać się do zatwierdzenia.
Zobacz także „ Co oznacza drzewko w Git? ”.


369

Możesz także wypróbować ten prosty sposób:

git show <COMMIT>

2
Wydaje się, że robi to coś zupełnie innego
Nędzna Zmienna

3
Pokazuje tylko komunikat zatwierdzenia. Nie różni się zmiany kodu zastosowane dla tego zatwierdzenia.
k0pernikus,

1
Tak? Nareszcie w ostatnich wersjach git ...
Davy

2
To powinna być zaktualizowana poprawna odpowiedź
Scott Skiles

1
To powinna być odpowiedź.
Roel

77

git show pokazuje zmiany wprowadzone w ostatnim zatwierdzeniu.

Odpowiednik git show HEAD.

git show HEAD~1 zabiera cię z powrotem 1 zatwierdzenie.


45

Zwyklę robię:

git diff HEAD~1

Aby pokazać zmiany dotyczące ostatniego zatwierdzenia. Jeśli masz więcej zatwierdzeń, po prostu zwiększ liczbę 1 do liczby różnic, które chcesz zobaczyć.


34

Najpierw uzyskaj identyfikator zatwierdzenia za pomocą,

git log #to list all

Lub

git log -p -1 #last one commit id

Skopiuj identyfikator zatwierdzenia.

Teraz używamy dwóch metod, aby wyświetlić listę zmian z konkretnego zatwierdzenia,

Metoda 1:

git diff commit_id^! #commit id something like this 1c6a6000asad012

Metoda 2:

git show commit_id
For example: git show 1c6a600a

2
Co to ^!znaczy?
Martín Coll

2
^! jest skrótem dla zatwierdzenia ^ .. zatwierdzenie, co oznacza, że ​​wykluczy wszystkich rodziców i sprawdzi różnice w tym zatwierdzeniu
Mohideen bin Mohammed

Nie jestem ekspertem, ale mam przypadek (z udziałem wielu gałęzi), w którym git log c ^! nie jest dokładnie taki sam jak git log c ^ .. c. W rzeczywistości jest o wiele lepiej: git log c ^ .. c wyświetlał zbyt wiele wpisów, podczas gdy git log c ^! zrobiłem dobrą rzecz, więc tego szukałem od dawna
user829755

32
git show <commit_sha>

To pokaże ci, co jest w tym zatwierdzeniu. Myślę, że możesz zrobić zasięg, po prostu umieszczając spację między dwoma shasami zatwierdzającymi.

git show <beginning_sha> <ending_sha>

co jest bardzo pomocne, jeśli często aktualizujesz dane, ponieważ dzienniki funkcji będą znajdować się w jednym rzędzie.


25

Ze strony podręcznika dla git-diff (1) :

git diff [options] [<commit>] [--] [<path>…]
git diff [options] --cached [<commit>] [--] [<path>…]
git diff [options] <commit> <commit> [--] [<path>…]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>

Użyj trzeciego w środku:

git diff [options] <parent-commit> <commit>

Również z tej samej strony podręcznika u dołu, w sekcji Przykłady :

$ git diff HEAD^ HEAD      <3>

Porównaj wersję przed ostatnim zatwierdzeniem i ostatnim zatwierdzeniem.

Wprawdzie jest to trochę mylące, byłoby mniej mylące jako

Porównaj najnowsze zatwierdzenie z zatwierdzeniem przed nim.


3
Twoje przeredagowanie dotyczyłoby git diff HEAD HEAD^.
Richard

git diff HEAD ^ HEAD nie wyświetla żadnych zmian.
user3690202

@ user3690202, co oznacza, że ​​nie ma żadnych zmian w wyświetlaniu. Czy tak jest w rzeczywistości?

Jak mogą nie być wyświetlane żadne zmiany? Jeśli chcesz zobaczyć ostatnie zatwierdzenie, na pewno, chyba że jest to całkowicie nowe repozytorium, będą pewne zmiany do wyświetlenia?
user3690202,

@ user3690202 możliwe jest dokonanie „pustego zatwierdzenia” za pomocą Git, które tak naprawdę nie zawiera żadnych zmian ze strony nadrzędnej, chociaż istnieje wbudowane zabezpieczenie, które sprawdza i zapobiega temu, chociaż jest to możliwe z opcją wiersza poleceń. Wątpię, byś celowo utworzył puste zatwierdzenie, więc inną możliwością jest to, że w jakiś sposób masz konwersję kończącą wiersz przed zatwierdzeniem (lub inne śmieszne białe znaki), co powoduje, że Git myśli, że tak naprawdę nie dokonano żadnych zmian. Na jakiej platformie używasz Git?


16

Inna możliwość:

git log -p COMMIT -1

1
@GrantMcLean Tak, i to już jest najwyższa odpowiedź, więc nie wspominam o tym.
John_West

11

Możesz użyć, git diff HEAD HEAD^1aby zobaczyć różnicę z zatwierdzeniem nadrzędnym.

Jeśli chcesz tylko zobaczyć listę plików, dodaj --statopcję.


To masz na myśli, git diff HEAD ^ 1 HEAD
Shibir Basak

Pamiętaj, że pokaże to, co dodałeś jako usunięty, ponieważ spowoduje odwrotne porównanie. Sposób, w jaki powinieneś czytać diffpolecenie, brzmi: co musiałbym zmienić w pliku, aby przejść z zatwierdzenia HEADdo zatwierdzenia HEAD^1?
plan mózgowy

9
git difftool COMMIT^ <commit hash>

jest również możliwe, jeśli skonfigurowałeś swój difftool.

Zobacz tutaj, jak skonfigurować difftool, lub stronę podręcznika tutaj

Dodatkowo możesz użyć, git diff-tree --no-commit-id --name-only -r <commit hash>aby zobaczyć, które pliki zostały zmienione / zatwierdzone w skrócie do zatwierdzania zmian


9

Podoba mi się poniższe polecenie do porównania konkretnego zatwierdzenia i jego ostatniego zatwierdzenia:

git diff <commit-hash>^-

Przykład:

git diff cd1b3f485^-

6

Aby zobaczyć autora i czas, użyj zatwierdzenia git show COMMIT. Co da w wyniku coś takiego:

commit 13414df70354678b1b9304ebe4b6d204810f867e
Merge: a2a2894 3a1ba8f
Author: You <you@you.com>
Date:   Fri Jul 24 17:46:42 2015 -0700

     Merge remote-tracking branch 'origin/your-feature'

Jeśli chcesz zobaczyć, które pliki zostały zmienione, uruchom następujące polecenie z wartościami z powyższej linii Scal git diff --stat a2a2894 3a1ba8f.

Jeśli chcesz zobaczyć rzeczywistą różnicę, uruchom git --stat a2a2894 3a1ba8f


„Jeśli chcesz zobaczyć rzeczywistą różnicę, uruchom git --stat a2a2894 3a1ba8f”. Myślę, że masz na myśli git diff a2a2894 3a1ba8finaczej unknown option: --stat.
Fruit

5

Aby sprawdzić pełne zmiany:

  git diff <commit_Id_1> <commit_Id_2>

Aby sprawdzić tylko zmienione / dodane / usunięte pliki:

  git diff <commit_Id_1> <commit_Id_2> --name-only

UWAGA : Aby sprawdzić różnicę bez zatwierdzenia pomiędzy, nie musisz umieszczać identyfikatorów zatwierdzenia.


4

Korzystam z Gita w wersji 2.6.1.windows.1 na Windows 10, więc potrzebowałem niewielkiej modyfikacji odpowiedzi Nevika (tylda zamiast karetki):

git diff COMMIT~ COMMIT

Inną opcją jest zacytowanie kursora:

git diff "COMMIT^" COMMIT

3

To polecenie zapewni ci nadrzędny hash zatwierdzenia Git:

git log -n 2 <commit-hash>

Po tym git diff-tool <commit-hash> <parent-commit-hash>

Przykład:

bonnie@bonnie ~/ $ git log -n 2 7f65b9a9d3820525766fcba285b3c678e889fe3

commit 7f65b9a9d3820525766fcba285b3c678e889fe3b
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 13:17:07 2016 +0530

CSS changed to maintain the aspect ratio of the channel logos and to fit them properly.

commit c3a61f17e14e2b80cf64b172a45f1b4826ee291f
Author: souparno <souparno.majumder@gmail.com>
Date:   Mon Jul 25 11:28:09 2016 +0530

The ratio of the height to width of the channel images are maintained.

Po tym

git difftool 7f65b9a9d3820525766fcba285b3c678e889fe3b c3a61f17e14e2b80cf64b172a45f1b4826ee291f

2

Jeśli chcesz tylko zobaczyć zmiany w ostatnim zatwierdzeniu, po prostu ci to git showzapewni.


1

W przypadku sprawdzenia zmiany źródła w widoku graficznym,

$gitk (Mention your commit id here)

na przykład:

$gitk HEAD~1 

Nie rozumiem, dlaczego ta odpowiedź została odrzucona. Zgadzam się, że dobrym pomysłem jest korzystanie z wiersza poleceń i tekstów, ale gitk zawiera wiele przydatnych informacji.
ShellFish
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.