Gibt es neben dem Schreiben eines Alias oder Skripts einen kürzeren Befehl zum Abrufen des Diff für ein bestimmtes Commit?
git diff 15dc8^..15dc8
Wenn Sie nur die einzelne git diff 15dc8
Festschreibungs- ID angeben, unterscheidet sich diese Festschreibung für HEAD.
Antworten:
Verwenden Sie
git show $COMMIT
. Es zeigt Ihnen die Protokollnachricht für das Commit und den Unterschied zu diesem bestimmten Commit.quelle
Verwenden:
wie im folgenden Fragment der Manpage git-rev-parse (1) (oder in der modernen Manpage gitrevisions (7) ) beschrieben:
Dies bedeutet, dass Sie
15dc8^!
als Abkürzung für15dc8^..15dc8
jeden Ort in Git verwenden können, an dem Überarbeitungen erforderlich sind. Für den Befehl diffgit diff 15dc8^..15dc8
wird verstanden alsgit diff 15dc8^ 15dc8
, was den Unterschied zwischen dem übergeordneten Element von commit (15dc8^
) und commit (15dc8
) bedeutet.Hinweis : In der Beschreibung in
git-rev-parse(1)
manpage spricht über Revisionsbereichen , wo es auch Commits für merge arbeiten muss, mit mehr als einem Elternteil. Dannr1^!
ist "r1 --not r1^@
" dh "r1 ^r1^1 ^r1^2 ...
"Sie können auch verwenden
git show COMMIT
, um eine Commit-Beschreibung und ein Diff für ein Commit abzurufen. Wenn Sie nur diff wollen, können Sie verwendengit diff-tree -p COMMIT
quelle
^!
übergeordnete Kurzschreibweise funktioniert bei verschiedenen Commits ordnungsgemäß mit difftool, bei Zusammenführungs-Commits ist der Unterschied jedoch umgekehrt. Warum so?Wenn Sie wissen, wie weit zurück, können Sie etwas versuchen wie:
Vorherige Commits funktionieren ungefähr so:
Es gibt viele Möglichkeiten, wie Sie Commits festlegen können:
Siehe diese Seite für Details .
quelle
Wie @mipadi hervorhebt, können Sie verwenden
git show $COMMIT
, aber dies zeigt auch einige Header und die Commit-Nachricht. Wenn Sie ein gerades Diff möchten, verwenden Siegit show --pretty=format:%b $COMMIT
.Dies ist offensichtlich keine sehr kurze Hand, daher behalte ich diesen Alias in meiner .gitconfig
Dies ermöglicht es mir, diff
git sd $COMMIT
zu zeigen .quelle
Viele der genannten Beispiele (z. B.
git diff 15dc8^!
odergit diff 15dc8^..15dc8
) funktionieren nicht, wenn Sie zsh verwenden und dieextendedglob
Option festgelegt haben. Sie können das Problem auf eine der folgenden drei Arten beheben:unsetopt extendedglob
(und / oder entfernen Sie es aus .zshrc)setopt NO_NOMATCH
(und / oder in .zshrc setzen)Entkomme dem Caret und knalle jedes Mal mit einem Backslash, z
git diff 15dc8\^\!
quelle
~ 1 bedeutet 'Eltern', ~ 2 'Großeltern usw.
quelle
Die obige Lösung von Paul hat das getan, was ich mir erhofft hatte.
Es ist auch nützlich, Aliase wie die erwähnten Kochfelder hinzuzufügen. Wenn Sie Folgendes in den Abschnitt [Alias] Ihrer ~ / .gitconfig-Datei einfügen, können Sie mit der Kurzschrift den Unterschied zwischen Kopf und Vorgänger anzeigen.
Wenn Sie dann $ git diff-last ausführen, erhalten Sie Ihr Ergebnis. Beachten Sie, dass dies auch beinhalten alle Änderungen , die Sie haben noch nicht so gut wie die diff zwischen Commits verpflichtet. Wenn Sie Änderungen ignorieren möchten, die Sie noch nicht festgeschrieben haben, können Sie diff verwenden, um den HEAD direkt mit dem übergeordneten Element zu vergleichen:
quelle
Verwendet Aliase, beantwortet Ihre Frage also nicht genau, aber ich finde diese nützlich, um das zu tun, was Sie beabsichtigen ...
quelle