Ich muss ein Skript schreiben, das Patches für eine Liste von SHA1-Commit-Nummern erstellt.
Ich habe versucht, zu verwenden git format-patch <the SHA1>
, aber das erzeugte einen Patch für jedes Commit seit diesem SHA1. Nachdem ein paar hundert Patches generiert wurden, musste ich den Prozess abbrechen.
Gibt es eine Möglichkeit, einen Patch nur für den spezifischen SHA1 zu generieren?
git apply --stat file.patch
# show stats.git apply --check file.patch
# Vor der Bewerbung auf Fehler prüfen.git am < file.patch
# wende den Patch endlich an.git am --keep-cr < mypatch.patch
git am -3 < file.patch
anwenden mit einem Drei-Wege - Merge , die Sie Konflikte mit lösen lassengit mergetool
danach (oder Bearbeitung manuell) finden Sie hier .git format-patch -1 <sha> path/to/file.js
Dadurch wird ein Patch erstellt, der nur die Unterschiede für die Datei enthält. JsZum Generieren der Patches aus den obersten Commits aus einem bestimmten sha1-Hash:
Die letzten 10 Patches von head in einer einzelnen Patch-Datei:
quelle
git format-patch -1 HEAD
wird Patch für das letzte Commit generieren-2
Patches für die letzten 2 Commits generiert, ist es das, und eine weitere Sache zur Verdeutlichung ist, dass der Befehl dergot format-patch -2 HEAD
gleiche ist wie die Zeilegit format-patch HEAD~2
Angenommen, Sie haben Commit-ID 2 nach Commit 1, die Sie ausführen können:
wobei 2 und 1 SHA-Hashes sind.
quelle
git diff hash^ hash
. Das "Hash ^" gibt das vorhergehende Commit an. (aber natürlich ist die Antwort von manojlds besser)git show HEAD > mypatch.diff
während Sie auf dem Commit sind, sollten Sie das gleiche tun.git diff 1 2
Dieser Befehl (wie bereits von @ Naftuli Tzvi Kay vorgeschlagen ):
Durch einen
HEAD
bestimmten Hash oder Bereich ersetzen .generiert die Patch-Datei für das neueste Commit, das so formatiert ist, dass es dem UNIX-Postfachformat ähnelt.
Anschließend können Sie die Patch-Datei in einem Postfachformat erneut anwenden, indem Sie:
Siehe :
man git-format-patch
.quelle
git
formatierte Patch, zumindest wenn der Benutzer ihn richtig anwendet.-k
Flagge (git am -3
) hat dieses Formular für mich behoben (keinePATCH[0/10]
Festschreibungsnachrichten). Git Version 2.20.1.windows.1Schnelle und einfache Lösung.
quelle
git apply --check patch-file-name
bevor Sie einen Patch anwenden. Dies hilft, Probleme zu vermeiden.Wenn Sie sicherstellen möchten, dass der Patch (Single Commit) zusätzlich zu einem bestimmten Commit angewendet wird, können Sie die neue Option git 2.9 (Juni 2016) verwenden
git format-patch --base
Siehe Commit bb52995 , Commit 3de6651 , Commit fa2ab86 , Commit ded2c09 (26. April 2016) von Xiaolong Ye (``) .
(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 72ce3ff , 23. Mai 2016)Git 2.23 (Q3 2019) wird dies verbessern, da die
--base
Option " " von "format-patch
" diepatch-ids
erforderlichen Patches auf instabile Weise berechnet hat, die aktualisiert wurde, um auf eine Weise zu berechnen, die mit "git patch-id --stable
" kompatibel ist .Siehe Commit a8f6855 , Commit 6f93d26 (26. April 2019) von Stephen Boyd (
akshayka
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 8202d12 , 13. Juni 2019)Vor Git 2.24 (Q4 2019) hat "
git format-patch -o <outdir>
" ein Äquivalent von "mkdir <outdir>
" nicht "mkdir -p <outdir>
" gemacht, was korrigiert wird.Siehe Commit edefc31 (11. Oktober 2019) von Bert Wesarg (
bertwesarg
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit f1afbb0 , 18. Oktober 2019)Mit Git 2.25 (Q1 2020)
git rebase
funktionierte " " nicht gut, wenn dieformat.useAutoBase
Konfigurationsvariable gesetzt wurde, die korrigiert wurde.Siehe Festschreiben cae0bc0 , Festschreiben 945dc55 , Festschreiben 700e006 , Festschreiben a749d01 , Festschreiben 0c47e06 (04. Dezember 2019) von Denton Liu (
Denton-L
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 71a7de7 , 16. Dezember 2019)quelle
So generieren Sie einen Pfad aus einem bestimmten Commit (nicht dem letzten Commit):
quelle
Wenn Sie nur die angegebene Datei unterscheiden möchten, können Sie:
quelle
Mit meinem Quecksilberhintergrund wollte ich verwenden:
Aber ich denke darüber nach,
git format-patch -1 $ID
jetzt zu verwenden.quelle
Wie kann ein Patch nur für den spezifischen SHA1 generiert werden?
Es ist ganz einfach:
Option 1.
git show commitID > myFile.patch
Option 2.
git commitID~1..commitID > myFile.patch
Hinweis: Ersetzen Sie
commitID
durch die tatsächliche Festschreibungs-ID (SHA1-Festschreibungscode).quelle