3719 Stimmen

Verschieben vorhandener, nicht gebundener Arbeiten in einen neuen Zweig in Git

Ich habe mit der Arbeit an einer neuen Funktion begonnen, und nachdem ich ein wenig programmiert hatte, beschloss ich, dass diese Funktion in einem eigenen Zweig untergebracht werden sollte.

Wie verschiebe ich die bestehenden, nicht freigegebenen Änderungen in einen neuen Zweig und setze meinen aktuellen Zweig zurück?

Ich möchte meinen aktuellen Zweig zurücksetzen und gleichzeitig die Arbeit an der neuen Funktion beibehalten.

1voto

Carlo Wood Punkte 4286

Dies ist die einzige Antwort, die Ihnen sagt, dass Sie die git stash -k die Sie benötigen...

wenn Sie sich bereits eine Stunde lang mit git add -p

und dann beschlossen, dass Sie Test was Sie in den Index aufgenommen haben vor die eigentliche Übergabe. In diesem Fall tun Sie no einfach verwenden git stash !

Tun Sie es stattdessen:

git stash -k

Dadurch bleibt der Index erhalten und der Rest, der sich noch im Arbeitsverzeichnis befindet und noch nicht in den Index aufgenommen wurde, wird entfernt. Das ist genau das, was Sie wollen.

Jetzt können Sie versuchen, zu kompilieren/testen und zu übertragen. D.h.

make
git commit -m 'Yay!'

Dann holen Sie sich die nicht übertragenen Änderungen zurück mit

git stash pop

Wenn Sie jedoch feststellen, dass es sich NICHT kompilieren lässt, dann sollten Sie Änderungen vornehmen und diese auch dem Index hinzufügen, was zu Verwirrung führen könnte git stash pop . Es ist nicht so gut, wenn es um das Zusammenführen geht. In diesem Fall sollten Sie wahrscheinlich sowieso nur committen; also:

make
git commit -m 'Grrrr'

Erstellen Sie dann einen neuen Zweig,

git switch -c tmpbranch

Ihre Arbeit dort erledigen (Code ändern, Tests durchführen und weitere Übertragungen vornehmen)

/* blood sweat and tears */

Sobald alles funktioniert, übertragen Sie es auf den neuen Zweig

commit -a -m 'Finally!'

zurück zum alten Zweig gehen und dann die git stash pop mit demselben Arbeitsverzeichnis, in dem Sie sich befanden, als Sie in den Stash verschoben haben.

git checkout youknowwhatbranchyouwereonright
git stash pop

Übertragen Sie auch das, sonst können Sie den tmpbranch nicht zusammenführen. Führen Sie dann den temporären Zweig zusammen, den Sie erstellt haben.

git commit -a -m 'Still working on this.'
git merge tmpbranch
/* fix collisions and commit */

Jetzt können Sie den Satz "Wir arbeiten noch daran" an den Anfang setzen und den Rest in einem einzigen Kommentar zusammenfassen. Zum Beispiel

git rebase -i

geben könnte:

pick 540623a Grrr
pick a8589d3 Still working on this.
pick d3b602c Finally

Dann ändern Sie das in:

reword 540623a Grrr
fixup d3b602c Finally
pick a8589d3 Still working on this.

Und schließlich die letzte Übergabe rückgängig machen (die Übergabe "Wir arbeiten noch daran")

git reset HEAD~1

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