In git können Sie die Ausgabe des git-diff
zwischen zwei Commits wie folgt aus:
git diff fa1afe1 deadbeef > patch.diff
Senden Sie die patch.diff
an den Entwickler und ließ ihn git-apply
es seinem Arbeitsplatz wie folgt aus:
git apply patch.diff
Wenn der andere Entwickler die Commits bereits in seinem Repository zur Verfügung hat, könnte er sie immer in sich selbst pipen, ohne so zu verschmelzen:
git apply < git diff fa1afe1 deadbeef
Sie können dann die add und die Änderungen in der diff the usual way.
Jetzt kommt der interessante Teil, wenn Sie den Patch zurück auf den Master-Zweig (das ist öffentlich) zusammenführen müssen. Betrachten Sie die folgende Revisionsbaum, wo C*
die aufgebrachte Patch von C
im Master-Zweig ist:
A---B---C---D master, public/master
\
E---C*---F feature_foo
Sie können git-rebase
verwenden das Thema Zweig zu aktualisieren (in diesem Beispiel genannt feature_foo
) mit ihm vorgelagerten Kopf ist. Was das bedeutet, ist, wenn Sie in der Art folgende:
git rebase master feature_foo
Git die Revisionsbaum wie folgt neu angeordnet werden und gilt auch den Patch selbst:
A---B---C---D master, public/master
\
E*---F* feature_foo
an den Upstream-Zweig Merging wird nun eine sein einfache Vorlauf-Zusammenführung. Überprüfen Sie auch, ob die neuen Commits E*
und F*
als vorherige E
bzw. F
funktionieren.
Sie können dasselbe mit den gleichen Schritten für einen Zweig eines anderen Entwicklers tun, aber anstatt dies für ein öffentliches Repository zu tun, werden Sie fetching Revisionen aus dem Repository des Entwicklers sein. Auf diese Weise müssen Sie den anderen Entwickler nicht nach einem Patch fragen, wenn dieser bereits in seinem Repo verfügbar ist.
Bitte beachten Sie nie eine öffentliche Zweigstelle rebase, weil der Befehl git Geschichte neu schreiben wird, was Sie nicht tun wollen, auf Branchen, die Menschen abhängen, und wird ein Chaos bei der Verschmelzung mit Remote-Repositories erstellen. Vergessen Sie auch niemals integrate often, damit andere in Ihrem Team an Ihren Änderungen teilnehmen können.
Nachher herausgefunden, dass Sie das gleiche mit git format-patch tun können, um einen Patch zu formatieren, und git bin, um den Patch zu übernehmen und zu committen. Beispiel: git format-patch -k --stdout R1 ... R2 | git am -3 -k – Spoike