Ich habe mehrere Commits für verschiedene Dateien durchgeführt, möchte aber bisher nur ein bestimmtes Commit in mein Remote-Repository übertragen.
Ist das möglich?
Ich habe mehrere Commits für verschiedene Dateien durchgeführt, möchte aber bisher nur ein bestimmtes Commit in mein Remote-Repository übertragen.
Ist das möglich?
Antworten:
Um ein bestimmtes Commit zu durchlaufen , können Sie schreiben:
git push <remotename> <commit SHA>:<remotebranchname>
vorausgesetzt, es ist <remotebranchname>
bereits auf der Fernbedienung vorhanden. (Wenn dies nicht der Fall ist, können Sie git push <remotename> <commit SHA>:refs/heads/<remotebranchname>
es automatisch erstellen.)
Wenn Sie ein Commit pushen möchten, ohne vorherige Commits zu pushen , sollten Sie zuerst git rebase -i
die Commits neu anordnen.
git push <remotename> <commit SHA>:<remotebranchname>
funktioniert. der Trick ist , um es zu kombinieren mit git rebase -i
dem Festschreiben Sie als die erste begehen, und geben Sie verschieben möchten , dass commit-sha
git push <remotename> <commit SHA>:refs/heads/<new remote branch name>
. Drücken Sie danach wie in der Antwort beschrieben.
git push origin HEAD~1:master
.
-f
Flagge.
Die anderen Antworten fehlen in den Nachbestellungsbeschreibungen.
git push <remotename> <commit SHA>:<remotebranchname>
wird ein einzelnes Commit pushen, aber dieses Commit muss das ÄLTESTE Ihrer lokalen, nicht gepushen Commits sein, nicht zu verwechseln mit dem Top-, First- oder Tip-Commit, die meiner Meinung nach allesamt mehrdeutige Beschreibungen sind. Das Commit muss das älteste Ihrer Commits sein, dh das am weitesten von Ihrem letzten Commit entfernte. Wenn es nicht das älteste Commit ist, werden alle Commits von Ihrem ältesten lokalen, nicht gepushen SHA an den angegebenen SHA gepusht. 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 übertragen.
Zusammenfassend habe ich verwendet
git rebase -i HEAD~<number of commits to SHA>
git push origin <post-rebase SHA>:master
um ein einzelnes Commit an meinen Remote-Master-Zweig zu senden.
Verweise:
Siehe auch:
Ich würde vorschlagen, zu verwenden git rebase -i
; Verschieben Sie das Commit, das Sie verschieben möchten, an den Anfang der von Ihnen vorgenommenen Commits. Verwenden Sie dann git log
, um den SHA des neu basierten Commits abzurufen, ihn zu überprüfen und zu verschieben. Durch die Rebase wird sichergestellt, dass alle anderen Commits jetzt Kinder des von Ihnen gepushen Commits sind, sodass auch zukünftige Pushs gut funktionieren.
git log
Bist du der Schritt?
Cherry-Pick funktioniert am besten im Vergleich zu allen anderen Methoden, während ein bestimmtes Commit ausgeführt wird.
Der Weg dazu ist:
Neuen Zweig erstellen -
git branch <new-branch>
Aktualisieren Sie Ihren neuen Zweig mit Ihrem Ursprungszweig -
git fetch
git rebase
Diese Aktionen stellen sicher, dass Sie genau das gleiche Material haben wie Ihre Herkunft.
Wählen sha id
Sie die Kirsche aus, die Sie schieben möchten -
git cherry-pick <sha id of the commit>
Sie können das sha id
durch Laufen bekommen
git log
Schieben Sie es zu Ihrem Ursprung -
git push
Laufen Sie, um gitk
zu sehen, dass alles so aussieht, wie Sie es wollten.
git rebase -i
ist die ideale Lösung, wie in den obigen Lösungen vorgeschlagen. Cherry Pick darf nur verwendet werden, wenn Sie das Commit duplizieren möchten.
Ich glaube, Sie müssten zu diesem Commit zurückkehren und es dann pushen. Oder Sie können cherry-pick
ein Commit in einen neuen Zweig durchführen und diesen in den Zweig im Remote-Repository verschieben. Etwas wie:
git branch onecommit
git checkout onecommit
git cherry-pick 7300a6130d9447e18a931e898b64eefedea19544 # From the other branch
git push origin {branch}
cherry-pick
das Commit machen was du willst.
Sie können auch in einem anderen Verzeichnis: