2012-09-07 6 views
271

Ich habe eine .diff-Datei, die von einem Mitarbeiter erstellt wurde, und möchte die Änderungen, die in dieser Diff-Datei aufgelistet sind, auf meinen lokalen Zweig desselben Repository anwenden. Ich habe keinen Zugriff auf den Computer oder Zweig dieses Benutzers, der zum Generieren dieser Diff-Datei verwendet wurde.Wie nehmen Sie eine Git-Diff-Datei und wenden Sie sie auf einen lokalen Zweig, der eine Kopie des gleichen Repository ist?

Offensichtlich könnte ich Zeile für Zeile gehen und alles neu eingeben, aber ich würde lieber das System nicht menschlichen Fehlern unterwerfen. Was ist der einfachste Weg, dies zu tun?

Antwort

406

Kopieren Sie die Diff-Datei auf der Wurzel Ihrer Repository, und dann tun:

git apply yourcoworkers.diff 

Weitere Informationen über den Befehl apply auf its man page zur Verfügung steht.

Übrigens: Eine bessere Möglichkeit, ganze Commits per Datei auszutauschen, ist die Kombination der Befehle git format-patch auf dem Sender und dann git am auf dem Empfänger, weil es auch die Autoreninformationen und die Commit-Nachricht überträgt.

Wenn die Patch-Anwendung fehlschlägt und die Commits, aus denen das Diff generiert wurde, in Ihrem Repo vorhanden sind, können Sie die -3 -Option apply verwenden, die versucht, die Änderungen zusammenzuführen.

Es ist auch mit Unix-Rohr funktioniert wie folgt:

git diff d892531 815a3b5 | git apply 
+1

Danke für die Antwort, aber das verursachte einen Fehler sagen: Patch fehlgeschlagen: filename.php: 202 Fehler: filename.php: Patch gilt nicht. Die gute Nachricht ist, dass es nicht der erste Dateiname in der Datei ist, so dass es zumindest einen Teil der Datei verarbeitet hätte. Irgendwelche Gedanken? –

+1

Sie scheinen auch Änderungen an dieser Datei vorzunehmen, die das Funktionieren des Patches verhindern. Um dies zu lösen, könnten Sie Ihre Änderungen festschreiben, einen neuen Zweig erstellen, ihn auf das Commit zurücksetzen, an dem Sie und Ihr Kollege auseinander gegangen sind, den Patch anwenden, ihn festschreiben und dann die beiden Zweige zusammenführen. – Philipp

+0

Die Datei war zu verschieden von dem, was in diesem Fall zur Verwendung der Diff-Datei existierte. Ich ging voran und tat es manuell, aber +1 für den richtigen Befehl, und ich akzeptiere, dass dies die richtige Antwort hätte sein sollen. –