Wie nimmt man eine Git-Diff-Datei und wendet sie auf einen lokalen Zweig an, der eine Kopie desselben Repositorys ist?

491

Ich habe eine .diff-Datei, die von einem Kollegen erstellt wurde, und möchte die in dieser Diff-Datei aufgeführten Änderungen auf meinen lokalen Zweig desselben Repositorys anwenden. Ich habe keinen Zugriff auf den PC oder Zweig dieses Workers, der zum Generieren dieser Diff-Datei verwendet wurde.

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

Mike_K
quelle

Antworten:

746

Kopieren Sie die Diff-Datei in das Stammverzeichnis Ihres Repositorys und führen Sie dann folgende Schritte aus:

git apply yourcoworkers.diff

Weitere Informationen zum applyBefehl finden Sie auf der Manpage .

Übrigens: Eine bessere Möglichkeit, ganze Commits per Datei auszutauschen, ist die Kombination der Befehle git format-patchauf dem Absender und dann git amauf dem Empfänger, da auch die Autoreninformationen und die Commit-Nachricht übertragen werden.

Wenn die Patch-Anwendung fehlschlägt und die Commits, aus denen der Diff generiert wurde, tatsächlich in Ihrem Repo sind, können Sie die -3Option verwenden, mit der applyversucht wird, die Änderungen zusammenzuführen.

Es funktioniert auch mit Unix-Pipe wie folgt:

git diff d892531 815a3b5 | git apply
Philipp
quelle
3
Vielen Dank für die Antwort, aber das verursachte einen Fehler, der besagte, Patch fehlgeschlagen: Dateiname.php: 202 Fehler: Dateiname.php: Patch gilt nicht. Die gute Nachricht ist, dass es nicht der erste Dateiname in der Datei ist, so dass es zumindest in der Lage gewesen wäre, einen Teil der Datei zu verarbeiten. Irgendwelche Gedanken?
Mike_K
4
Sie scheinen auch Änderungen an dieser Datei zu haben, die verhindern, dass der Patch funktioniert. Um dies zu lösen, können Sie Ihre Änderungen festschreiben, einen neuen Zweig erstellen, ihn auf den Commit zurücksetzen, bei dem Sie und Ihr Mitarbeiter auseinander gegangen sind, den Patch anwenden, ihn festschreiben und dann die beiden Zweige zusammenführen.
Philipp
3
@orlybg Wenn Sie es noch nicht festgeschrieben haben, setzen Sie git reset --hardIhren Arbeitsbaum auf das letzte Festschreiben zurück. Wenn Sie es bereits festgeschrieben haben, fügen Sie die Revision hinzu, zu der Sie zurückkehren möchten.
Philipp
5
@orlybg Sorry, aber dann bist du geschraubt. Git erstellt nur einen Prüfpunkt, zu dem Sie zurückkehren können, wenn Sie ein Commit durchführen. Aus diesem Grund empfehlen viele Git-Guides, sich früh und häufig zu engagieren .
Philipp
4
Führen Sie mindestens @orlybg aus, git stashbevor Sie eine Aktion ausführen, die Sie möglicherweise rückgängig machen möchten. In beiden Fällen können Sie Ihren Vorrat zurückbringen und zu einem späteren Zeitpunkt festschreiben.
Maurice