Ci sono molti modi diversi a seconda di quanto sei lontano e su quale ramo (i) li desideri.
Facciamo un classico errore:
$ git checkout master
... pause for coffee, etc ...
... return, edit a bunch of stuff, then: oops, wanted to be on develop
Quindi ora vuoi che questi cambiamenti, a cui non ti sei ancora impegnato master
, siano attivi develop
.
Se non haidevelop
ancora un metodo, il metodo è banale:
$ git checkout -b develop
Questo crea una nuova develop
filiale a partire da dove ti trovi ora. Ora puoi impegnarti e le nuove cose sono tutte attive develop
.
Si hanno una develop
. Vedi se Git ti permetterà di cambiare senza fare nulla:
$ git checkout develop
Ciò avrà successo o si lamenterà. Se ci riesce, fantastico! Basta impegnarsi. Altrimenti ( error: Your local changes to the following files would be overwritten ...
), hai ancora molte opzioni.
Il più semplice è probabilmente git stash
(come hanno detto tutti gli altri risponditori che mi hanno battuto al clic post). Esegui git stash save
o git stash push
, 1 o semplicemente git stash
che è l'abbreviazione di save
/ push
:
$ git stash
Questo commette il tuo codice (sì, fa davvero alcuni commit) usando uno strano metodo non-branch-y. I commit che effettua non sono "su" alcun ramo ma ora sono archiviati in modo sicuro nel repository, quindi ora puoi cambiare ramo, quindi "applicare" lo stash:
$ git checkout develop
Switched to branch 'develop'
$ git stash apply
Se tutto va bene e ti piacciono i risultati, allora dovresti farlo git stash drop
. Questo elimina il riferimento ai bizzarri commit non branch-y. (Sono ancora nel repository e a volte possono essere recuperati in caso di emergenza, ma per la maggior parte degli scopi, dovresti considerarli andati a quel punto.)
Il apply
passaggio fa una fusione dei cambiamenti nascosti, usando il potente meccanismo di fusione sottostante di Git, lo stesso tipo di cose che usa quando si fanno le fusioni di rami. Ciò significa che puoi ottenere "unisci conflitti" se il ramo su cui stavi lavorando per errore è sufficientemente diverso dal ramo su cui intendevi lavorare. Quindi è una buona idea ispezionare attentamente i risultati prima di presumere che lo stash sia stato applicato in modo pulito, anche se Git stesso non ha rilevato alcun conflitto di unione.
Molte persone usano git stash pop
, che è una scorciatoia per git stash apply && git stash drop
. Va bene per quanto va, ma significa che se l'applicazione si traduce in un pasticcio e decidi di non voler proseguire su questo percorso, non puoi recuperare facilmente la scorta. Ecco perché raccomando apply
risultati separati e di controllo, drop
solo se / quando soddisfatti. (Questo ovviamente introduce un altro punto in cui puoi fare un'altra pausa caffè e dimenticare quello che stavi facendo, tornare indietro e fare la cosa sbagliata , quindi non è una cura perfetta.)
1 Il save
in git stash save
è il vecchio verbo per la creazione di una nuova scorta. Git versione 2.13 ha introdotto il nuovo verbo per rendere le cose più coerenti pop
e per aggiungere più opzioni al comando di creazione. La versione 2.16 di Git ha deprecato formalmente il vecchio verbo (sebbene funzioni ancora in Git 2.23, che è l'ultima versione al momento in cui sto modificando questo).
git stash
git-scm.com/book/en/Git-Tools-Stashing