1093 Stimmen

Wie kann ich einen bestimmten Commit auf ein Remote-System pushen, und nicht die vorherigen Commits?

Ich habe mehrere Commits an verschiedenen Dateien vorgenommen, aber bisher möchte ich nur einen bestimmten Commit in mein entferntes Repository übertragen.

Ist das möglich?

8 Stimmen

Mögliche Duplikate von git: Eine einzelne Übertragung pushen

0 Stimmen

Siehe gute Technik hier: stackoverflow.com/a/1789142/1579667

1461voto

Geoff Reedy Punkte 33293

Zum Schieben bis zu eine bestimmte Übergabe, können Sie schreiben:

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

bereitgestellt <remotebranchname> bereits auf der Gegenstelle existiert. (Wenn dies nicht der Fall ist, können Sie mit git push <remotename> <commit SHA>:refs/heads/<remotebranchname> um sie automatisch zu erstellen).

Wenn Sie eine Übergabe durchführen wollen なくして vorherige Übertragungen zu verschieben, sollten Sie zunächst git rebase -i um die Übertragungen neu zu ordnen.

147voto

Samuel Punkte 6806

Bei den anderen Antworten fehlen die Beschreibungen zur Neuordnung.

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

wird einen einzelnen Commit pushen, aber dieser Commit muss der ÄLTESTE Ihrer lokalen, nicht gepushten Commits sein, nicht zu verwechseln mit dem Top-, First- oder Tip-Commit, die meiner Meinung nach alle zweideutige Bezeichnungen sind. Der Commit muss der älteste Ihrer Commits sein, d.h. der am weitesten von Ihrem letzten Commit entfernte. Wenn es nicht der älteste Commit ist, werden alle Commits von Ihrem ältesten, lokalen, nicht gepushten SHA bis zum angegebenen SHA gepusht. Um die Commits neu zu ordnen, verwenden Sie:

git rebase -i HEAD~xxx

Nachdem Sie die Übergabe neu geordnet haben, können Sie sie sicher in das entfernte Repository übertragen.

Zusammengefasst habe ich

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

um eine einzelne Übergabe an meinen entfernten Master-Zweig vorzunehmen.

Referenzen:

  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 Rebase und anschließendem Pull
  2. git: Pushing einzelner Commits, Neuordnung mit Rebase, doppelte Commits

28voto

David Punkte 787

Cherry-Pick funktioniert im Vergleich zu allen anderen Methoden am besten, wenn ein bestimmter Commit gepusht wird.

Der Weg dazu ist:

Einen neuen Zweig erstellen -

git branch <new-branch>

Aktualisieren Sie Ihren neuen Zweig mit Ihrem Ursprungszweig -

git fetch

git rebase

Mit diesen Maßnahmen stellen Sie sicher, dass Sie genau das Gleiche haben, was Ihr Ursprung hat.

Rosinenpicken der sha id dass Sie sich anstrengen wollen -

git cherry-pick <sha id of the commit>

Sie können die sha id durch Laufen

git log

Schieben Sie es zu Ihrem Ursprung -

git push

走る gitk um zu sehen, dass alles so aussieht, wie Sie es wollten.

27voto

Walter Mundt Punkte 23839

Ich würde vorschlagen, dass Sie git rebase -i ; verschieben Sie den Commit, den Sie pushen wollen, an den Anfang der Commits, die Sie gemacht haben. Verwenden Sie dann git log um die SHA des rebased Commits zu erhalten, sie zu überprüfen und zu pushen. Der rebase stellt sicher, dass alle anderen Commits nun Kinder des von Ihnen gepushten Commits sind, so dass zukünftige Pushes ebenfalls funktionieren werden.

21voto

Josh K Punkte 27354

Ich glaube, Sie müssten mit "git revert" zu diesem Commit zurückkehren und ihn dann pushen. Oder Sie könnten cherry-pick eine Übergabe in einen neuen Zweig, und schieben Sie diesen in den Zweig des entfernten Repositorys. Etwa so:

git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X