Come posso copiare il contenuto di una filiale in una nuova filiale locale?


270

Ho lavorato su una filiale locale e ho anche inviato le modifiche al telecomando. Voglio annullare le modifiche su quel ramo e fare qualcos'altro su di esso, ma non voglio perdere completamente il lavoro. Stavo pensando a qualcosa come creare un nuovo ramo localmente e copiare lì il vecchio ramo, quindi posso annullare le modifiche e continuare a lavorare sul vecchio ramo. C'è un modo migliore forse? O come posso farlo?


10
4 anni dopo, con Git 2.15 (Q4 2017), avrai git branch -c A B. Vedi la mia risposta qui sotto
VonC

Risposte:


445
git checkout old_branch
git branch new_branch

Questo ti darà una nuova filiale "new_branch" con lo stesso stato di "old_branch".

Questo comando può essere combinato con il seguente:

git checkout -b new_branch old_branch

134
O ancora più breve git checkout -b new_branch(quando sei già acceso old_branch).
Koraktor,

4
Questo crea semplicemente il nuovo ramo ma non è in grado di copiare il contenuto da un ramo all'altro. Quando provo questo comando mostra solo "Il ramo di nome **** esiste già".
anoop,

7
Penso che se si crea un nuovo ramo come questo non si ha immediatamente una copia del vecchio ramo ma semplicemente un nuovo puntatore alla testa del vecchio ramo. Ma quando ora fai qualcosa di simile al rebasing del nuovo ramo, dovresti vedere che il vecchio ramo è ancora nel suo stato originale mentre il nuovo ramo viene modificato. Quindi penso che faccia quello che vuole l'OP.
uli_1973,

1
git checkout old_branch e di git branch new_branch .... È meglio usare il comando sopra sulla produzione, poiché il comando sotto creerà un nuovo ramo e ti porterà al nuovo ramo (cambia ramo come nuovo ramo) .... git checkout -b new_branch old_branch
Kiran

Per sovrascrivere un ramo, vedi stackoverflow.com/questions/26961371/...
MCCCS

55
git branch copyOfMyBranch MyBranch

Questo evita l'atto potenzialmente dispendioso in termini di tempo e inutile di estrarre un ramo. Ricordiamo che un checkout modifica l '"albero di lavoro", che potrebbe richiedere molto tempo se è grande o contiene file di grandi dimensioni (immagini o video, ad esempio).


1
Naturalmente, se hai file binari in git, specialmente quelli di grandi dimensioni, è probabilmente utile analizzare la tua strategia per tali file. Naturalmente, esistono casi insoliti e avere file binari in git sarebbe perfettamente accettabile.
reverendo il

52

Con Git 2.15 (4 ° trimestre 2017), " git branch" imparato " -c/-C" per creare un nuovo ramo copiandone uno esistente.

Vedi commit c8b2cec (18 giu 2017) di Ævar Arnfjörð Bjarmason ( avar) .
Vedi commit 52d59cc , commit 5463caa (18 giu 2017) di Sahil Dua ( sahildua2305) .
(Unita da Junio ​​C Hamano - gitster- in commit 3b48045 , 03 ott 2017)

branch: aggiungi un'opzione --copy( -c) per andare con --move( -m)

Aggiungi la possibilità a --copyun ramo e al suo reflog e alla sua configurazione, questo utilizza lo stesso macchinario sottostante dell'opzione --move( -m) tranne il reflog e la configurazione viene copiata invece di essere spostata.

Questo è utile per esempio la copia di un ramo argomento a una nuova versione, ad esempio, worka work-2dopo la presentazione della workargomento all'elenco, pur conservando tutte le informazioni di tracking e altre configurazioni che va con il ramo, e, a differenza --movemantenendo l'altro ramo già presentato in giro per riferimento.

Nota: quando si copia un ramo, si rimane sul ramo corrente.
Come spiega Junio ​​C Hamano:

Quando si crea un nuovo ramo Bcopiando il ramo Ache sembra essere il ramo corrente, si aggiorna anche HEADper puntare al nuovo ramo.
Probabilmente è stato creato in questo modo perché " git branch -c A B" ha portato a termine la sua implementazione su " git branch -m A B",

Questo non corrisponde alle aspettative normali.
Se fossi seduto su una sedia blu, e qualcuno venisse e lo ridipingesse in rosso, accetterei di finire seduto su una sedia che ora è rossa (sto anche bene stare in piedi, invece, poiché non c'è più la mia sedia blu preferita ).

Ma se qualcuno crea una nuova sedia rossa, modellandola sulla sedia blu su cui sono seduto, non mi aspetto di essere staccato dalla sedia blu e di finire seduto sulla nuova sedia rossa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.