Wie erstelle ich einfach einen Patch aus meinem neuesten Git-Commit?

186

Ich suche nach dem magischen Befehl, einen Patch aus dem letzten Commit zu erstellen.

Mein Workflow sieht manchmal so aus

vi some.txt
git add some.txt
git commit -m "some change"

und jetzt will ich nur noch schreiben

git create-patch-from-last-commit-to-file SOME-PATCH0001.patch

aber was soll ich da setzen anstatt create-patch-from-last-commit-to-file?

claj
quelle

Antworten:

297

Allgemein,

git format-patch -n HEAD^

(Überprüfen Sie die Hilfe für die vielen Optionen), obwohl es wirklich zum Versenden ist. Für ein einziges Commit nur

git show HEAD > some-patch0001.patch

gibt Ihnen einen brauchbaren Patch.

Nutzlos
quelle
18
Seien Sie vorsichtig mit "git show HEAD> some-patch0001.patch". Wenn es im farbigen Terminal aufgerufen wird, werden auch farbige Escape-Sequenzen in die Datei kopiert.
Hrach
12
Sie können auch verwenden git diff > change.patch. Sie können auch einen Revisionsbereich einschließen und Patches für nicht festgeschriebene Änderungen erstellen. Der große Unterschied besteht jedoch darin, dass keine Unterschiede in Binärdateien enthalten sind . Siehe die Antwort auf Was ist der Unterschied zwischen 'git format-patch' und 'git diff'? für mehr Details.
Rangi Keen
4
@hrach nicht unter Linux nicht
Robin Green
4
Nein, denn das steht nicht in der ersten Zeile. Entweder git format-patch -1oder git format-patch -n HEAD^sollte funktionieren.
Nutzlos
4
Danke, ich hatte nicht verstanden, dass es buchstäblich der Buchstabe 'n' war, ich dachte, es sei ein Platzhalter (Format-Patch hat sowohl die Optionen '-n' als auch '- <n>').
Étienne
60

Aus der @ Unseless-Antwort können Sie auch das allgemeine Formular ohne Parameter für das letzte Commit verwenden und es in eine Datei mit folgenden Informationen einfügen:

git format-patch HEAD^ --stdout > patchfile.patch

Oder für Windows-Benutzer sauberer zu sein, wenn Carets durch Verdoppeln entkommen müssen:

git format-patch HEAD~1 --stdout > patchfile.patch
a1an
quelle
2
Hat für mich gearbeitet - danke. Wenn Sie Windows und Git verwenden, müssen Sie der Karotte entkommen (ich weiß abscheulich): "Git Format-Patch HEAD ^^ --stdout> patchfile.patch"
Steve Midgley
3
Um das Windows-Problem zu vermeiden, dass Sie diesem Caret entkommen müssen (wodurch es wie ein anderer gültiger git-Befehl aussieht), können Sie die Alternative von verwenden git format-patch HEAD~1. Ich denke, das ist unter Windows weniger verwirrend.
Michael Burr
30

Auf andere Weise können Sie Folgendes verwenden, wenn Sie die Commit-ID dieses bestimmten Commits haben:

git format-patch -1 {commit-id}
Vijay C.
quelle
9

Sie benötigen die -pOption zum Git-Protokoll:

git log -1 -p --pretty='%b'
Brandan
quelle
Verwenden Sie diese Option, wenn Sie die E-Mail von / Datum / Betreff am Anfang der Datei nicht interessieren.
Ryan H.
5
git format-patch -1

Erledigt den Job für mich.

Katu
quelle