Wie wende ich einen mit git format-patch generierten Patch an?

221

Ich habe 2 lokale Git-Repositorys, die beide auf dasselbe Remote-Repository verweisen.

git format-patch 1Wie kann ich diesen Patch in einem Git-Repository auf das andere Repository anwenden?

Silverburgh
quelle

Antworten:

330

Hinweis: Sie können zunächst eine Vorschau der Funktionen Ihres Patches anzeigen:

Zuerst die Statistiken:

git apply --stat a_file.patch

Dann ein Trockenlauf, um Fehler zu erkennen:

git apply --check a_file.patch

Schließlich können Sie git amIhren Patch als Commit anwenden: Sie können einen angewendeten Patch abmelden.
Dies kann zum späteren Nachschlagen nützlich sein.

git am --signoff < a_file.patch 

Siehe ein Beispiel in diesem Artikel :

In Ihrem Git-Protokoll finden Sie, dass die Festschreibungsnachrichten ein "Abgemeldet von" -Tag enthalten. Dieses Tag wird von Github und anderen gelesen, um nützliche Informationen darüber zu erhalten, wie das Commit im Code gelandet ist.

Beispiel

VonC
quelle
9
Hinweis für sich selbst: 200. Great Answer Goldabzeichen.
VonC
4
git am < somepatch.patchergibt "fatal: leerer Identitätsname (für <>) nicht erlaubt". Kann mir jemand erklären warum?
Gromit190
@ gromit190 das bedeutet schlechte AuthorHeader im Patch, und / oder du hast es nicht getan git config user.{name,email}.
ulidtko
OK; git apply --checksagt patch does not applyund git apply -3sagt repository lacks the necessary blob to fall back on 3-way merge.In git ist es ein Kinderspiel, Commits neu zu gründen; Aber wie können Benutzer ihre Patches auf den aktualisierten Code zurücksetzen ?
ulidtko
1
@ulidtko Vielleicht mit stackoverflow.com/a/15375869/6309 ?
VonC
162
git apply name-of-file.patch
Jeff Dallien
quelle
25
Dies hat möglicherweise nicht die ursprüngliche detaillierte Frage beantwortet, aber es hat die Frage im Titel beantwortet, weshalb ich auf dieser Seite bin. Danke!
Rock Lee
12
Ich verstehe, dass dies eine alte Frage und Antwort ist ... aber ich dachte, es könnte für einige Leute hilfreich sein, den Unterschied zwischen git apply und git am zu verstehen .
mgarey
1
git apply "[... vollständiger Pfad zur Datei ...] / name-of-file.patch"
Anton Lyhin
41

Oder, wenn Sie es in die alte Schule treten:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch
Dominic Cooney
quelle
3
Nur damit Sie sich bewusst sind: Dadurch wird kein Commit erstellt, sodass Commit-Nachrichten und Autoreninformationen verloren gehen.
Caesar
22

Zuerst sollten Sie sich den Unterschied zwischen git amund notierengit apply

Wenn Sie verwenden git am, möchten Sie normalerweise viele Patches anwenden. Daher sollte verwendet werden:

git am *.patch

oder nur:

git am

Git findet Patches automatisch und wendet sie der Reihe nach an ;-)

UPD
Hier erfahren Sie, wie Sie solche Patches generieren

Eugen Konkov
quelle
1
Diese Erklärung des Unterschieds half mir zu verwenden git apply.. und in --reverse:-) 👍
Jordan Gee
22

Wenn Sie es als Commit anwenden möchten , verwenden Sie git am .

Jakub Narębski
quelle
1
Wie bekommt man normalerweise die mbox-Dateien überhaupt?
Ciro Santilli 6 冠状 病 六四 事件 6
14

Wenn Sie eine JetBrains-IDE (wie IntelliJ IDEA, Android Studio, PyCharm) verwenden, können Sie die Patch-Datei ziehen und in die IDE ablegen. Daraufhin wird ein Dialogfeld mit dem Inhalt des Patches angezeigt. Jetzt müssen Sie nur noch auf "Patch anwenden" klicken und ein Commit wird erstellt.

ice1000
quelle
1
Danke dafür. Das ist wirklich nützlich für alle. Es gibt eine akzeptierte Antwort. das ist aber auch nützlich.
Lasitha Benaragama
1
@ambarox Aber diese Antwort wurde einmal herabgestimmt, ich weiß nicht warum
ice1000
1
Vielleicht glaubt jemand, dass Patches nur über die Befehlszeile angewendet werden können. : D Ich habe dir eine Gegenstimme gegeben. Prost Kumpel.
Lasitha Benaragama
1
@ LasithaBenaragama - Art von. SO soll nicht nur dem OP helfen, sondern auch allen, die folgen. Diese Antwort ist zwar nützlich, bietet aber keine allgemeine Lösung. Dies wäre ein ausgezeichneter kleiner Blog-Beitrag, aber keine "SO gute" Antwort. Würde das Downvote erklären!
OldTinfoil
-2

Sie können das unten genannte cmd verwenden

git apply fileName.patch
Amit Sharma
quelle