Questo mi succede spesso: scrivo del codice, vado a controllare le mie modifiche e poi mi rendo conto di non essere nel ramo corretto per controllare le modifiche. Tuttavia non posso passare ad un altro ramo senza che le mie modifiche vengano ripristinate. C'è un modo per spostare le modifiche su un altro ramo da controllare lì?spostamento di file modificati in un altro ramo per il check-in
risposta
git stash
è tuo amico.
Se non è stato ancora eseguito il commit, è sufficiente eseguire git stash
. Ciò salverà tutte le tue modifiche.
Passare al ramo in cui si desiderano le modifiche ed eseguire git stash pop
.
Ci sono molti usi per git stash. Questo è certamente uno dei motivi più utili.
Un esempio:
# work on some code
git stash
git checkout correct-branch
git stash pop
Se non avete già commesso le modifiche, basta usare git checkout
per passare al nuovo ramo e poi commetterli normalmente - le modifiche ai file non sono legati ad un ramo particolare fino a quando li si commettono.
Se avete già commesso le modifiche:
- Tipo
git log
e ricordare lo SHA del commit che si desidera spostare. - Controllare il ramo su cui si desidera spostare il commit.
- Digitare
git cherry-pick SHA
sostituendo lo SHA dall'alto. - Torna al tuo ramo originale.
- Utilizzare
git reset HEAD~1
per reimpostare prima del commit del ramo errato.
cherry-pick
accetta un dato commit e lo applica al capo attualmente estratto, consentendo così di copiare il commit su un nuovo ramo.
Se si desidera spostare le modifiche in un nuovo ramo, questo può essere fatto con due soli comandi:
git stash
git stash branch new-branch
Secondo il git stash documentation:
branch
<branchname> [<stash>]
Creates and checks out a new branch named
<branchname>
starting from the commit at which the<stash>
was originally created, applies the changes recorded in to the new working tree and index.
Purtroppo questo succede a e abbastanza regolarmente come bene e io uso git stash
se ho realizzato il mio errore prima git commit
e utilizzare git cherry-pick
in caso contrario, entrambi i comandi sono spiegati molto bene in altre risposte
voglio aggiungere una precisazione per git checkout targetBranch
: questo comando conserverà solo il vostro directory di lavoro e messo in scena snapshot se targetBranch ha la stessa storia come la vostra filiale corrente
If you haven't already committed your changes, just use git checkout to move to the new branch and then commit them normally
@ dichiarazione di Amber non è falso, quando si sposta in un newBranch, git checkout -b newBranch
, un nuovo puntatore i s creato e punta allo stesso identico commit del ramo attuale.
Infatti, se è capitato di avere un altro ramo che condivide la storia con il vostro ramo corrente (sia punto allo stesso commit) si può "spostare i cambiamenti" da git checkout targetBranch
Tuttavia, di solito diversi rami significa storia diversa, e Git non ti permetterà di passare tra questi rami con una directory di lavoro sporca o un'area di staging. nel qual caso è possibile fare git checkout -f targetBranch
(cambiamenti pulite e usa e getta) o git stage
+ git checkout targetBranch
(pulita e Salva modifiche), semplicemente eseguendo git checkout targetBranch
darà un errore:
error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches. Aborting
- 1. Spostamento di modifiche locali in un ramo
- 2. Spostamento di elementi HTML contenenti contentEditable su un altro ramo in dom senza perdere il focus
- 3. Spostamento di commit da un ramo all'altro
- 4. Come unire un file specifico da un ramo in un altro ramo in Git
- 5. Come unire il ramo gerrit ad un altro ramo gerrit
- 6. Come unire un ramo ad un altro ramo in GIT?
- 7. Git avviare il ramo da un altro ramo senza rilevamento
- 8. Creazione di un ramo git basato su un altro ramo
- 9. Git recuperare un elenco di tutti i file modificati in un ramo
- 10. SVN - Unire un ramo in un altro?
- 11. SVN: Spostamento del tronco del repository sul ramo di un altro (con cronologia)
- 12. git checkout un altro ramo
- 13. git: checkout file da un altro ramo nel ramo attuale (non passare HEAD all'altro ramo)
- 14. Da master, commit in un altro ramo
- 15. Esclusione file per un ramo
- 16. Come resettare un ramo su un altro ramo con git?
- 17. Come passare a un altro ramo di subversione in Intellij?
- 18. TFS: sovrascrivere un ramo con un altro
- 19. Foursquare checkin
- 20. In Mercurial, posso applicare le modifiche da un file a un altro file nello stesso ramo?
- 21. Come posso sapere quali file sono stati modificati in un ramo?
- 22. Spostamento di file in python
- 23. Spostamento della copia di lavoro svn su un altro computer
- 24. Come posso sovrascrivere, non unire, un ramo remoto in un altro ramo?
- 25. Copia di una cartella non tracciata in un altro ramo
- 26. Recursive checkin using Clearcase
- 27. Utilizzo di Git per creare un archivio di file modificati
- 28. Git: ottenere modifiche da un altro ramo
- 29. Git marca il punto master remoto su un altro ramo
- 30. Git: ripristina/ripristina un intero ramo in uno stato di un altro ramo?
Non c'è bisogno di mettere da parte non salvate cambiate, vanno con te quando si controlla un ramo. Stash è più per la memorizzazione a lungo termine di cose temporanee (cose che vuoi finire e commettere in seguito, ma devi fare qualcos'altro in questo momento). – Tekkub
Ho capito. Quindi devo nascondere, cambiare ramo e quindi inserire 'C: \ kf [sviluppare +0 ~ 4 -0]> funzione checkit git/clienti
errore: le modifiche locali ai seguenti file verrebbero sovrascritte dal pagamento:
AspWebApp.vNext/global.asa
RestApi/Web.config
Prego, commettete le modifiche o mettetele da parte prima di poter cambiare ramo.
Aborting' – IsmailS
@Tekkub "archiviazione a lungo termine di cose temporanee" che dice che si sente molto imbarazzante, un altro punto per usare la memoria è che lo spinge in una pila, quindi se non vuoi che riporti e lavori su qualcos'altro è utile in questo modo. Sì, non è necessario, ma si sente semplicemente più pulito e più controllato. – Atherion