Unterschied zwischen aktueller und letzter Version finden

670

Wie können Sie mit Git den Unterschied zwischen der aktuellen und der letzten Version feststellen?

git diff last version:HEAD
Rajeev
quelle
1
Wenn Sie GitHub für den Cloud-Standort Ihres Repos verwenden, ist dies sehr einfach: Navigieren Sie zu Ihrem Projekt und klicken Sie auf die Überschrift "Commits" in der Tabelle, in der Ihr Projekt angezeigt wird
David Lundquist,
1
Die Bedeutung von "aktuelle und letzte Version" sollte in der Frage wirklich geklärt werden.
Faintsignal

Antworten:

1170

Ich verstehe die Bedeutung von "letzte Version" nicht wirklich.

Da auf das vorherige Commit mit HEAD ^ zugegriffen werden kann, denke ich, dass Sie nach etwas suchen wie:

git diff HEAD^ HEAD

Ab Git 1.8.5 @ist ein Alias ​​für HEAD, so dass Sie verwenden können:

git diff @~..@

Folgendes wird auch funktionieren:

git show

Wenn Sie den Unterschied zwischen head und einem Commit kennen möchten, können Sie Folgendes verwenden:

git diff commit_id HEAD

Dadurch wird Ihr Visual Diff-Tool gestartet (falls konfiguriert):

git difftool HEAD^ HEAD

Da der Vergleich mit HEAD standardmäßig ist, können Sie ihn weglassen (wie von Orient hervorgehoben ):

git diff @^
git diff HEAD^
git diff commit_id

Warnungen

  • @ScottF und @Panzercrisis erklären in den Kommentaren, dass unter Windows das ~Zeichen anstelle von verwendet werden muss ^.
Francisco Puga
quelle
Ich wollte so etwas wie eine festgelegte Version und eine Version davor ... Git Diff Head Head-1
Rajeev
7
Ab Git 1.8.5 @ist ein Alias ​​für HEAD. Und da ~und ^dasselbe sind, wenn nur ein Commit zurückgeht, finde ich es git diff @~..@viel einfacher zu tippen.
Andrew
80
@ Andrew git showist noch einfacher, da dies @~..@die Standardeinstellung ist.
Amalloy
3
git showdruckt lediglich die Festschreibungsnachricht aus, gibt zumindest in Git 2.5.4 (Apple Git-61) keinen Unterschied der spezifischen Änderungen aus, sodass dies eigentlich keine Antwort auf die Frage des OP wäre.
user1944491
1
Das Problem dabei git showist, dass Sie bei HEADeinem Zusammenführungs-Commit nicht das bekommen, was Sie erwarten, da das Zusammenführungs-Commit selbst möglicherweise keine Änderungen selbst aufweist. git diff HEAD^ HEADzeigt die tatsächlichen Änderungen zwischen den Versionen
RubenLaguna
157

Angenommen, "aktuelle Version" ist das Arbeitsverzeichnis (nicht HEADfestgeschriebene Änderungen ) und "letzte Version" ist (letzte festgeschriebene Änderungen für den aktuellen Zweig), tun Sie dies einfach

git diff HEAD

Das Guthaben für Folgendes geht an den Benutzer Cerran.

Und wenn Sie beim Festschreiben immer den Staging-Bereich überspringen -a, können Sie ihn einfach verwenden git diff.

Zusammenfassung

  1. git diff zeigt nicht bereitgestellte Änderungen.
  2. git diff --cached zeigt inszenierte Änderungen.
  3. git diff HEAD zeigt alle Änderungen (sowohl inszeniert als auch nicht inszeniert).

Quelle: git-diff (1) Handbuchseite - Cerran

CharlesB
quelle
16
Und wenn Sie beim Festschreiben immer den Staging-Bereich überspringen -a, können Sie ihn einfach verwenden git diff. <1> git diffzeigt nicht bereitgestellte Änderungen. <2> git diff --cachedzeigt inszenierte Änderungen. <3> git diff HEADzeigt alle Änderungen (sowohl inszeniert als auch nicht inszeniert). Quelle: git-diff (1) Handbuchseite
Cerran
1
Dies sollte die akzeptierte Antwort sein, da sie die Absicht der Frage beantwortet.
Tgoneil
Wie heißt "die aktuelle nicht bereitgestellte Version" in Git? Gibt es eigentlich einen Namen?
Mathieu CAROFF
118

Wie in einem Kommentar von amalloy erwähnt , können Sie mit "aktuelle und letzte Version" das letzte Commit und das Commit davor meinen, das Sie einfach verwenden können

git show
Nighto
quelle
5
Das habe ich gesucht. Gute Antwort.
CodeManiak
12
Verwenden Sie git show HEAD~1diese Option , um das vorletzte Commit git show HEAD~2usw. für ältere Commits anzuzeigen. Zeigen Sie nur eine einzelne Datei über git show HEAD~2 my_file.
Florian Brucker
60

Unterschied zwischen vorletztem Commit und letztem Commit (plus ggf. aktuellem Status):

git diff HEAD~

oder sogar (einfacher zu tippen)

git diff @~

Wo @ist das Synonym für den HEADaktuellen Zweig und ~bedeutet "gib mir das Elternteil der erwähnten Revision".

Tomilov Anatoliy
quelle
Ich mag git diff HEAD^(eher als die äquivalente HEAD~Form). Es ist ein bisschen einfacher, sich an einen "alten
Idioten
3
Die Karotte ist in einigen Terminals ein Problem. Schön, die Option zu haben
light24bulbs
1
Antwort könnte erklären , was die verbessert werden ~und @Mittel.
Bob Stein
1
Wenn wir nur überprüfen möchten, was beim letzten Festschreiben festgeschrieben wurde, verwenden Sie dies nicht (da sich schmutzige Änderungen auf das Diff auswirken). Eine kürzere Syntax diff HEAD^ HEADsollte eigentlich sein git diff @^!. Siehe git-scm.com/docs/gitrevisions fürr1^!
Johnny Wong
@ JohnnyWong Vielen Dank für die Klarstellung. Ich erwähnte den "aktuellen Zustand", um die Leser nicht zu verwirren.
Tomilov Anatoliy
53

Sie können es auch so machen:

Vergleichen Sie mit dem vorherigen Commit

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

Vergleichen Sie mit den aktuellen und vorherigen zwei Commits

git diff --name-status HEAD~2..HEAD
Naoko
quelle
16

Verwenden cachedSie einfach das Flag, wenn Sie hinzugefügt haben, aber noch keine Festschreibung vorgenommen haben:

git diff --cached --color
Andy
quelle
1
Genau das habe ich gesucht, als ich diese Frage gefunden habe. Vielen Dank!
William Rogers
7

Schnell und einfach, vorausgesetzt, Sie sind im Meister:

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

Beispiel:

    git diff asdfioei91819280din198:file.txt file.txt
Bryan
quelle
4

Verwenden Sie zunächst " git log", um die Protokolle für das Repository aufzulisten.

Wählen Sie nun die beiden Festschreibungs-IDs aus, die sich auf die beiden Festschreibungen beziehen. Sie möchten die Unterschiede sehen ( Beispiel - Top Commit und einige ältere Commits (gemäß Ihrer Erwartung an die aktuelle Version und einige alte Versionen) ).

Verwenden Sie als Nächstes:

git diff <commit_id1> <commit_id2>

oder

git difftool <commit_id1> <commit_id2>
Parasrish
quelle
3

Wenn HEAD auf das oberste Commit hinweist, können Sie Folgendes tun:

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

Unterschied zwischen dem ersten und dem zweiten Commit:

git diff HEAD~1 HEAD

Unterschied zwischen erstem und drittem Commit:

git diff HEAD~2 HEAD

Unterschied zwischen zweitem und drittem Commit:

git diff HEAD~2 HEAD~1

Und so weiter...

bit_cracker007
quelle
2

Ich verwende Bitbucket mit der Eclipse- IDE und dem installierten Eclipse EGit- Plugin.

Ich vergleiche eine Datei aus einer beliebigen Version ihres Verlaufs (wie SVN ).

Menü Projekt Explorer → Datei → Rechtsklick → TeamIm Verlauf anzeigen .

Dadurch wird der Verlauf aller Änderungen in dieser Datei angezeigt. CtrlKlicken Sie nun auf und wählen Sie zwei beliebige Versionen aus → "Vergleichen Sie miteinander" .

Mandrake
quelle
2

Dies funktioniert auch für Tags (entfernen Sie die 'uniq' unten und andere Teile, wenn Sie alle Änderungen sehen müssen):

 git diff v1.58 HEAD 

Das Folgende ist dasselbe, und das könnte für die kontinuierliche Integration (CI) von Mikrodiensten in einem monolithischen Repository nützlich sein :

git diff v1.58 HEAD  --name-only | sort -u | awk 'BEGIN {FS="/"} {print $1}' | uniq
<Folder Name> 

(Gutschrift - https://dzone.com/articles/build-test-and-deploy-apps-independently-from-a-mo )

Alex Punnen
quelle