2014-10-03 11 views
6

Ich kann nicht pushen, wenn ich remote arbeite, also möchte ich einen einzigen Patch aus allen Commits erstellen, die noch nicht auf meinem Entwicklungszweig gepusht wurden, um ihn zu mailen. Wie mache ich das?git create patch von unpushed commits

+0

mögliches Duplikat von [Viewing Unpushed Git Commits] (http://stackoverflow.com/questions/2016901/viewing-unpushed-git-commits) – d33tah

+1

absolut nicht, dass Thread antwortet nur, wie unpushed Commits anzeigen, sagt nichts über Erstelle einen Patch von ihnen – Kosmotaur

Antwort

10

git format-patch <commit-ish> erstellt eine Patch-Datei für jedes Commit, das Sie seit dem angegebenen Commit vorgenommen haben.

Also, alle nicht gedrückten Commits zu exportieren, einfach

git format-patch origin/master -o patches/ 

setzen und alle von ihnen werden Ausgang in das patches/ Verzeichnis sein.

Wenn Sie eine einzelne Datei haben wollen, fügen Sie --stdout:

git format-patch origin/master --stdout > patches_$(date -I).patch 

Dies wird eine Datei namens patches_2014-10-03.patch erstellen (oder ein anderes Datum) mit allen Patches drin. Vorsicht:patch oder andere einfache Patch-Anwendungen können nicht mit der produzierten Datei umgehen. Es funktioniert nur mit git am.


Nebenbei bemerkt:
Ein einfache (und robuste), was zu tun wäre, eine Kopie Ihrer Repo auf einem thumbdrive oder ähnlich zu halten. Dann richten Sie den Thumbdrive als Fernbedienung ein (git remote add thumb /media/thumbdrive), drücken Sie Ihre Commits dazu (git push thumb master) und wenn Sie in Ihrer Firma sind, ziehen Sie vom Laufwerk und drücken Sie zum Ursprung.

+0

Danke, das war genau das, was ich suchte BTW, auf OS X 'Datum' stellte sich heraus, nicht zu erkennen, die' -I'-Option, so nannte ich gerade meinen Patch 'foo.patch', Happy Days – Kosmotaur

+0

Gut zu wissen, ich habe mich daran gewöhnt, '$ (date -I)' überall zu verwenden :) – cfstras

3

Statt creating a patch, könnten Sie ein bundle (dh eine Datei repräsentiert ein Git-Repo, von dem aus Sie ziehen können, wird) erstellen. In Ihrem Fall wird ein incremental bundle benötigt.

git bundle create ../yourRepo.bundle" --since=x.days.ago --all 

x Ersetzen durch dann Anzahl der Tage, die Sie in diesem Bündel setzen wollen: keine Angst, „zu mayn“ Tage in diesem Repo zu setzen: jemand aus dem Bündel Klonen nur die neuen Commits bekommen, nicht die, die er/sie bereits im lokalen Repo hatte.

Ein Bündel ist eine einzelne Datei, wie ein Patch, kann aber auch als Git Repo verwendet werden: einfach zu kopieren und einfach zu verwenden (als reguläres Git Repo).
Wenn Sie nur einen lokalen Repo mit Commits durchführen, die von einem Remote-Repo durchgeführt wurden (von dem Sie nicht direkt drücken konnten), ist dies einfacher als Patches.