Come faccio a spostare un ramo Git nel suo repository?


180

Ho un ramo che mi piacerebbe spostare in un repository Git separato e idealmente mantenere la storia di quel ramo nel processo. Finora ho guardato git filter-branch, ma non riesco a capire se può fare quello che voglio fare.

Come estraggo un ramo Git nel suo repository?

Risposte:


281

Puoi semplicemente spingere un ramo in un nuovo repository. Tutta la sua storia andrà con esso. È quindi possibile scegliere se eliminare il ramo dal repository originale.

per esempio

git push url://to/new/repository.git branch-to-move:new-branch-name

Per un nuovo repository, new-branch-name è in genere master.

È possibile creare un nuovo repository vuoto con git init.


15
Nel caso qualcuno si stia chiedendo, ho sostituito l'URL con il percorso a una directory del repository Git, e ha funzionato perfettamente.
Aupajo,

48
Puoi anche nominare il nome della filiale nel nuovo repository: git push url://to/new/repository.git branch-to-move:new-branch-name
Yves Van Broekhoven,

4
Il commento sopra di Yves è corretto, altrimenti non avrai master in là e il processo di clonazione si concluderà warning: remote HEAD refers to nonexistent ref, unable to checkout.. Se già a quel punto, vai git checkout -b branch-to-movee sei al sicuro o semplicemente vai con il git checkout -b mastertuo ramo principale :)
Ain Tohvri,

git checkout -b masterrisolto il mio problema era sullo schermo error: src refspec master does not match any.(mi chiedo solo perché non ho visto il nome della filiale in cui mi trovavo) Grazie
kangkyu

2
Nel caso in cui questa risposta sia stata fonte di confusione anche per te, ecco come ho avuto un senso per farla funzionare: 1) nel tuo terminale, essere nella directory che contiene il repository e il ramo che si desidera trasformare in un nuovo repository; 2) urldovrebbe essere un URL git, come git@github.com: brianzelip / groceries.git; 3) branch-to-moveè il ramo del repository corrente che si desidera trasformare in un nuovo repository; 4) new-branch-nameè il nome desiderato per la nuova filiale nel nuovo pronti contro termine in fase di creazione, vale a dire: master.
Brian Zelip,

19

Ciò manterrà la cronologia di tutti i rami, ma farà in modo che la tua copia punti in particolare a un ramo:

git clone -b newbranch CurrentRepo NewRepo

Questo non "sposta" nulla, ne fa solo una copia.


2
Vale la pena notare che clone -bè nuovo. Richiede git> = 1.6.5 (rilasciato a ottobre 2009).
CB Bailey,

Ho avuto problemi a farlo funzionare, ma è stato prima che vedessi il messaggio di Charles Bailey.
Aupajo,
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.