Frage Generiere einen Git-Patch für ein bestimmtes Commit


Ich muss ein Skript schreiben, das Patches für eine Liste von SHA1-Commit-Nummern erstellt.

Ich habe es versucht git format-patch <the SHA1>, aber das erzeugte einen Patch für jeden Commit seit diesem SHA1. Nachdem ein paar hundert Patches generiert wurden, musste ich den Prozess beenden.

Gibt es eine Möglichkeit, einen Patch nur für den spezifischen SHA1 zu generieren?


945
2017-07-12 00:35


Ursprung


Antworten:


Versuchen:

git Format-Patch -1 <sha>

oder

git format-patch -1 HEAD

Wenden Sie den Patch mit dem Befehl an:

git am < file.patch

1539
2017-07-12 00:43



Zum Erzeugen der Patches aus den obersten Commits eines bestimmten sha1-Hash:

git format-patch -<n> <SHA1>

Die letzten 10 Patches von head in einer einzigen Patch-Datei:

git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch

234
2018-04-23 14:34



Angenommen, Sie haben die Commit-ID 2 nach dem Commit 1, das Sie ausführen könnten:

git diff 2 1 > mypatch.diff

wo 2 und 1 SHA-Hashes sind.


61
2017-07-12 00:42



Dieser Befehl (wie bereits von @Naftuli Tzvi Kay):

git format-patch -1 HEAD

Ersetzen HEAD mit spezifischem Hash oder Bereich.

generiert die Patch-Datei für das neueste Commit, das dem UNIX-Postfachformat ähnelt.

-<n> - Bereiten Sie Patches von den obersten Commits vor.

Anschließend können Sie die Patch-Datei erneut in einem Postfachformat anwenden, indem Sie

git am -3k 001*.patch

Sehen: man git-format-patch.


50
2017-07-06 13:52



git format-patch commit_Id~1..commit_Id  
git apply patch-file-name

Schnelle und einfache Lösung.


17
2018-05-04 16:52



Pfad von einem bestimmten Commit (nicht dem letzten Commit) generieren:

git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE

5
2018-05-24 07:26



Wenn Sie sicher sein wollen, 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

git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE

Sehen commit bb52995, begehe 3de6651, begehe fa2ab86, commit ded2c09 (26 Apr 2016) von Xiaolong Ye (``).
(Zusammengeführt von Junio ​​C Hamano - gitster - im commit 72ce3ff, 23. Mai 2016) 

format-patch: hinzufügen '--baseOption zum Aufzeichnen von Basisbauminformationen

Betreuer oder Tester von Drittanbietern möchten möglicherweise den genauen Basisbaum wissen   Die Patch-Serie gilt für. GIT-Format-Patch a 'lehren--base' Möglichkeit   um die Basisbauminformation aufzuzeichnen und sie an das Ende des ersten anzufügen   Nachricht (entweder das Anschreiben oder das erste Patch in der Serie).

Die Basisbauminformation besteht aus dem bekannten "Basis-Commit"   Das ist Teil des stabilen Teils der Projektgeschichte   sonst funktioniert ab und null oder mehr "Voraussetzung Patches", die sind   bekannte Patches im Flug, die noch nicht Teil des "base commit" sind   das muss in topologischer Reihenfolge zusätzlich zu "base commit" angewendet werden   bevor die Patches angewendet werden können.

Das "Basis-Commit" wird als "base-commit: "gefolgt von dem 40-hex von   der Commit-Objektname
  Ein "vorausgesetzter Patch" wird gezeigt als "prerequisite-patch-id: "gefolgt von der 40-hex" Patch-ID ", die erhalten werden kann, indem der Patch durch die"git patch-id --stable" Befehl.


5
2018-06-01 06:29



Wenn Sie nur die angegebene Datei unterscheiden möchten, können Sie:

git diff master 766eceb - verbindungen /> 000-mysql-connector.patch


1
2018-01-17 09:40



Wie kann man einen Patch nur für den spezifischen SHA1 erzeugen?

Es ist ganz einfach:

Option 1. git show commitID > myFile.patch

Option 2. git commitID~1..commitID > myFile.patch

Hinweis: Ersetzen commitIDmit tatsächlicher Commit-ID (SHA1-Commit-Code).


0