Znajdowanie różnic między bieżącą a ostatnią wersją

670

Używając Git, jak możesz znaleźć różnicę między bieżącą a ostatnią wersją?

git diff last version:HEAD
Rajeev
źródło
1
Jeśli używasz GitHub do lokalizacji repozytorium w chmurze, jest to bardzo proste: przejdź do swojego projektu i kliknij nagłówek „zatwierdza” w tabeli, w której wyświetla się Twój projekt
David Lundquist,
1
Znaczenie „aktualnej i ostatniej wersji” naprawdę powinno zostać wyjaśnione w pytaniu.
faintsignal

Odpowiedzi:

1170

Naprawdę nie rozumiem znaczenia „ostatniej wersji”.

Ponieważ dostęp do poprzedniego zatwierdzenia można uzyskać za pomocą HEAD ^, myślę, że szukasz czegoś takiego:

git diff HEAD^ HEAD

Począwszy od Gita 1.8.5, @jest to alias HEAD, więc możesz użyć:

git diff @~..@

Działa również:

git show

Jeśli chcesz poznać różnicę między head a dowolnym zatwierdzeniem, którego możesz użyć:

git diff commit_id HEAD

Spowoduje to uruchomienie narzędzia wizualnego porównywania (jeśli skonfigurowano):

git difftool HEAD^ HEAD

Ponieważ porównanie z HEAD jest domyślne, możesz je pominąć (jak wskazał Orient ):

git diff @^
git diff HEAD^
git diff commit_id

Ostrzeżenia

  • @ScottF i @Panzercrisis wyjaśniają w komentarzach, że w Windows ~należy użyć znaku zamiast ^.
Francisco Puga
źródło
Chciałem czegoś takiego jak zatwierdzona wersja i wersja przed nim ... git diff head head-1
Rajeev
7
Od wersji Git 1.8.5 @jest pseudonimem dla HEAD. A ponieważ ~i ^są takie same, gdy cofam się tylko o jedno zatwierdzenie, git diff @~..@znacznie łatwiej jest pisać.
Andrew
80
@Andrew git showjest jeszcze łatwiejszy, ponieważ @~..@jest to domyślna rzecz do pokazania.
amalloy
3
git showpo prostu drukuje komunikat zatwierdzenia, nie wypisuje różnic konkretnych zmian, przynajmniej w Git 2.5.4 (Apple Git-61), więc w rzeczywistości nie byłby to odpowiedź na pytanie OP.
user1944491
1
Problem git showpolega na tym, że jeśli HEADjest to zatwierdzenie scalania, nie dostaniesz tego, czego oczekujesz, ponieważ samo zatwierdzenie scalania może nie zawierać żadnych zmian. git diff HEAD^ HEADpokaże rzeczywiste zmiany między wersjami
RubenLaguna
158

Zakładając, że „bieżąca wersja” to katalog roboczy (niezatwierdzone modyfikacje), a „ostatnia wersja” to HEAD(ostatnie zatwierdzone modyfikacje dla bieżącej gałęzi), po prostu wykonaj

git diff HEAD

Kredyt za następujące dotyczy użytkownika Cerran.

A jeśli zawsze pomijasz obszar pomostowy -apodczas zatwierdzania, możesz po prostu użyć git diff.

Podsumowanie

  1. git diff pokazuje zmiany etapowe.
  2. git diff --cached pokazuje zmiany etapowe.
  3. git diff HEAD pokazuje wszystkie zmiany (zarówno etapowe, jak i niestacjonarne).

Źródło: git-diff (1) Strona podręcznika - Cerran

CharlesB
źródło
16
A jeśli zawsze pomijasz obszar pomostowy -apodczas zatwierdzania, możesz po prostu użyć git diff. <1> git diffpokazuje zmiany etapowe . <2> git diff --cachedpokazuje zmiany etapowe . <3> git diff HEADpokazuje wszystkie zmiany (zarówno etapowe, jak i niestacjonarne). Źródło: Strona git-diff (1)
Cerran
1
To powinna być zaakceptowana odpowiedź, ponieważ odpowiada ona celowi pytania.
tgoneil
Jak nazywa się „aktualna wersja niestacjonarna” w git? Czy jest tak naprawdę imię?
Mathieu CAROFF,
118

Jak podkreślono w komentarzu przez amalloy , jeśli przez „Informacje bieżące i ostatnie wersje” masz na myśli ostatni popełnić i popełnić wcześniej, można po prostu użyć

git show
Nighto
źródło
5
Właśnie tego szukałem. Świetna odpowiedź.
CodeManiak,
12
Służy git show HEAD~1do wyświetlania ostatniego zatwierdzenia i git show HEAD~2itd. Dla starszych zatwierdzeń. Pokaż tylko jeden plik przez git show HEAD~2 my_file.
Florian Brucker
60

Różnica między ostatnim a jednym zatwierdzeniem i ostatnim zatwierdzeniem (plus aktualny stan, jeśli istnieje):

git diff HEAD~

lub nawet (łatwiejsze do pisania)

git diff @~

gdzie @jest synonimem HEADbieżącej gałęzi i ~oznacza „daj mi rodzic wspomnianej wersji”.

Tomiłow Anatolij
źródło
Bardzo lubię git diff HEAD^(zamiast równoważnej HEAD~formy). Jest to trochę łatwiejsze do zapamiętania dla „starego
dupka
3
Marchew jest problemem w niektórych terminalach. Miło mieć opcję
light24bulbs
1
Odpowiedź można poprawić, wyjaśniając, co ~i co @oznacza.
Bob Stein
1
Jeśli chcemy tylko sprawdzić, co jest zatwierdzone w ostatnim zatwierdzeniu, nie używaj tego (ponieważ brudne zmiany wpływają na różnicę). Tak naprawdę diff HEAD^ HEADpowinna być krótsza składnia git diff @^!. Zobacz git-scm.com/docs/gitrevisions dlar1^!
Johnny Wong
@JohnnyWong Dziękujemy za wyjaśnienia. Wspomniałem o „obecnym stanie”, aby nie mylić czytelników.
Tomilov Anatoliy
53

Możesz to zrobić w ten sposób:

Porównaj z poprzednim zatwierdzeniem

git diff --name-status HEAD~1..HEAD

Porównaj z obecnymi i poprzednimi dwoma zatwierdzeniami

git diff --name-status HEAD~2..HEAD
naoko
źródło
16

Po prostu użyj cachedflagi, jeśli dodałeś, ale jeszcze tego nie zrobiłeś:

git diff --cached --color
Andy
źródło
1
Właśnie tego szukałem, kiedy znalazłem to pytanie. Dzięki!
William Rogers
7

Szybkie i proste, zakładając, że jesteś mistrzem:

    git diff (checkout_id):file.txt file.txt

Przykład:

    git diff asdfioei91819280din198:file.txt file.txt
Bryan
źródło
4

Po pierwsze użyj „git log ”, aby wyświetlić dzienniki repozytorium.

Teraz wybierz dwa identyfikatory zatwierdzenia, odnoszące się do dwóch zatwierdzeń. Chcesz zobaczyć różnice ( przykład - Top najwięcej zatwierdzeń i niektóre starsze zatwierdzenia (zgodnie z oczekiwaniami dotyczącymi bieżącej wersji i niektórych starszych wersji) ).

Następnie użyj:

git diff <commit_id1> <commit_id2>

lub

git difftool <commit_id1> <commit_id2>
parasrish
źródło
3

Jeśli HEAD wskazuje najwyższe zatwierdzenie, możesz zrobić coś takiego:

commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2

Różnica między pierwszym a drugim zatwierdzeniem:

git diff HEAD~1 HEAD

Różnica między pierwszym a trzecim zatwierdzeniem:

git diff HEAD~2 HEAD

Różnica między drugim a trzecim zatwierdzeniem:

git diff HEAD~2 HEAD~1

I tak dalej...

bit_cracker007
źródło
2

Używam Bitbucket z Eclipse IDE z Eclipse EGit zainstalowaną wtyczką .

Porównuję plik z dowolnej wersji jego historii (np. SVN ).

Menu Project Explorer → Plik → kliknij prawym przyciskiem → ZespółPokaż w historii .

Spowoduje to wyświetlenie historii wszystkich zmian w tym pliku. Teraz Ctrlkliknij i wybierz dowolne dwie wersje → „Porównaj ze sobą” .

Mandragora
źródło