it-swarm.com.de

Wie kann ich eine bestimmte Festschreibung an eine entfernte Festschreibung senden und nicht an frühere Festschreibungen?

Ich habe mehrere Commits für verschiedene Dateien durchgeführt, möchte aber bisher nur ein bestimmtes Commit auf mein Remote-Repository übertragen.

Ist das möglich?

764
Robert23

Um p through ein bestimmtes Commit zu pushen, können Sie schreiben:

git Push <remotename> <commit SHA>:<remotebranchname>

vorausgesetzt, <remotebranchname> ist bereits auf der Fernbedienung vorhanden. (Wenn dies nicht der Fall ist, können Sie git Push <remotename> <commit SHA>:refs/heads/<remotebranchname> verwenden, um es automatisch zu erstellen.)

Wenn Sie ein Commit pushen möchten ohne vorherige Commits pushen möchten, sollten Sie zuerst git rebase -i verwenden, um die Commits neu zu ordnen.

986
Geoff Reedy

Versuchte die vorgeschlagene Lösung:

git Push <remotename> <commit SHA>:<remotebranchname>

so was:

git Push Origin 712acff81033eddc90bb2b45e1e4cd031fefc50f:master

In meinem Fall hatte der Master 5 Commits vor mir und ich wollte nur meinen letzten Commit pushen, aber der obige wollte am Ende alle meine Änderungen bis einschließlich des genannten Commits pushen. Es scheint mir, dass die Cherry-Pick-Methode ein besserer Ansatz für diesen Anwendungsfall sein könnte.

142
Sam M

Die anderen Antworten fehlen in den Umordnungsbeschreibungen.

git Push <remotename> <commit SHA>:<remotebranchname>

wird ein einzelnes Commit pushen, aber dieses Commit muss das ÄLTESTE Ihrer lokalen, nicht gepuschten Commits sein, nicht zu verwechseln mit dem Commit top, first oder tip, die meiner Meinung nach allesamt mehrdeutige Beschreibungen sind. Das Commit muss dem ältesten Ihrer Commits entsprechen, d. H. Dem am weitesten von Ihrem letzten Commit entfernten. Wenn es nicht das älteste Commit ist, werden alle Commits von Ihrem ältesten, lokalen, nicht übertragenen SHA an das angegebene SHA übertragen. Um die Commits neu zu ordnen, verwenden Sie:

git rebase -i HEAD~xxx

Nachdem Sie das Commit neu angeordnet haben, können Sie es sicher in das Remote-Repository verschieben.

Zusammenfassend habe ich verwendet

git rebase -i HEAD~<number of commits to SHA>
git Push Origin <post-rebase SHA>:master

push ein einzelnes Commit zu meinem Remote-Master-Zweig.

Verweise:

  1. http://blog.dennisrobinson.name/Push-only-one-commit-with-git/
  2. http://blog.dennisrobinson.name/reorder-commits-with-git/

Siehe auch:

  1. git: Doppelte Commits nach lokalem Neustart, gefolgt von Pull
  2. git: Einzelne Commits pushen, Neuanordnen mit Rebase, Doppelte Commits
66
Samuel

Ich würde vorschlagen, git rebase -i zu verwenden; Verschieben Sie das Commit, das Sie übertragen möchten. Verschieben Sie das Commit an die Spitze der von Ihnen getätigten Commits. Verwenden Sie dann git log, um das SHA des erneut basierten Commits abzurufen, überprüfen Sie es und drücken Sie es. Die Rebase stellt sicher, dass alle Ihre anderen Commits jetzt Kinder des von Ihnen gepushten Commits sind, sodass zukünftige Pushs ebenfalls gut funktionieren.

25
Walter Mundt

Cherry-Pick funktioniert im Vergleich zu allen anderen Methoden am besten, während ein bestimmtes Commit ausgeführt wird.

Der Weg dazu ist:

Erstelle eine neue Filiale -

git branch <new-branch>

Aktualisieren Sie Ihren neuen Zweig mit Ihrem Origin-Zweig -

git fetch

git rebase

Diese Aktionen stellen sicher, dass Sie genau das gleiche Material haben wie Ihr Origin.

Wählen Sie den sha id aus, den Sie tun möchten. Push -

git cherry-pick <sha id of the commit>

Sie können den sha id durch Ausführen abrufen

git log

Schieben Sie es zu Ihrem Ursprung -

git Push

Führen Sie gitk aus, um zu sehen, dass alles so aussieht, wie Sie es wollten.

20
David

Ich glaube, Sie müssten zu diesem Commit zurückkehren und dann Push it. Oder Sie können cherry-pick ein Commit in einen neuen Zweig ausführen und dieses an den Zweig im Remote-Repository senden. So etwas wie:

git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git Push Origin {branch}
11
Josh K