2017-12-21 7 views
0

Ich habe den Master-Zweig gezogen. Im lokalen Master habe ich mehrere Commits gemacht. Jetzt möchte ich nur den letzten Commit (und nicht die vorherigen) schieben. Wie erreiche ich das?Sollten wir das Commit beim Rebasing höher oder niedriger setzen, wenn wir es nur schieben wollen?

Ich fand eine gute Erklärung, wie es geht: How to push only one commit with Git. So sollte der Befehl so etwas wie diese:

git push origin 2dc2b7e393e6b712ef103eaac81050b9693395a4:master 

Oder in einer "abstrakt" Form:

git push <remote name> <commit hash>:<remote branch name> 

aber soweit ich verstand, in einem allgemeinen Fall, wird es nicht schieben Sie das einzelne Commit (gegeben durch seinen Hash). Stattdessen wird das angegebene Commit sowie alle Commits, die vor dem angegebenen Commit ausgeführt wurden, übertragen.

Um das Ziel zu erreichen (nur einen einzigen Commit ausführen), müssen wir die Commits zuerst so umordnen, dass der Commit, den wir schieben wollen, als der älteste (der erste in der Reihenfolge der Commits) angezeigt wird. . Wie es gemacht wird, ist hier beschrieben: How to reorder commits with Git. Diese Beschreibung ist klar, das einzige, was mich verwirrt diese Phrase ist:

In meinem Fall wollte ich meine oberste begehen bringen, wo ich die Projektdatei bis auf den Boden fixiert, so dass ich nur schieben kann das Commit auf dem Remote-Server.

Aber ist es nicht so, dass wir eine Art Gegenteil machen wollen? Wenn wir das Commit "nach unten" bringen, wird es als das letzte (neueste) Commit betrachtet, und wenn wir seinen Hash verwenden, wenn wir pushen, werden wir alles vorantreiben, was davor kommt (was "alle Commits" bedeutet). .

Also, was wir tun möchten, ist unsere Commit höher in der Datei, die wir sehen, wenn wir git rebase -i HEAD~5 ausführen. Habe ich recht?

Antwort

1

Wenn Sie nur eine verpflichten cfoo zu einem Zweig bbar, hier ist eine einfache Lösung schieben möchte:

git fetch origin bbar 
git checkout FETCH_HEAD 
git cherry-pick cfoo 
git push origin HEAD:bbar 

In einem realen Fall, müssen Sie git stash oder etwas anderes tun zu Backup ausgeführt werden soll der Problemumgehung.

Wie für "höher", ja, im Texteditor, der nach git rebase -i erscheint, ist die erste Zeile die älteste Festschreibung. Wenn Sie nur einen Commit durchführen möchten, fügen Sie ihn in die erste Zeile ein.

+0

Aber was, wenn ich nicht aus dem Repository ziehe, an das ich drücke? – Roman

+0

Ist etwas falsch mit meinem Ansatz? – Roman

+0

@Roman ist es egal. Sie können die URL dynamisch im Remote-Repository angeben, wenn Sie 'git push' oder' git pull' (einschließlich 'git fetch') ausführen. 'git push KOPF: ', 'git ziehen ', wo 'branchA' und' branchB' den gleichen Namen haben können. Wenn "urlA" und "urlB" konstant sind, können Sie sie als eine oder zwei Fernbedienungen hinzufügen. Eine Fernbedienung hat zwei Werte, einen zum Drücken und den anderen zum Abrufen. – ElpieKay

Verwandte Themen