Comment déplacer une branche Git vers son propre référentiel?

184

J'ai une branche que j'aimerais déplacer dans un référentiel Git séparé, et idéalement garder l'historique de cette branche dans le processus. Jusqu'à présent, j'ai regardé git filter-branch, mais je ne peux pas savoir s'il peut faire ce que je veux faire.

Comment extraire une branche Git dans son propre référentiel?

Aupajo
la source

Réponses:

287

Vous pouvez simplement pousser une branche vers un nouveau référentiel. Toute son histoire l'accompagnera. Vous pouvez ensuite choisir de supprimer la branche du référentiel d'origine.

par exemple

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

Pour un nouveau référentiel, new-branch-name est généralement master.

La création d'un nouveau référentiel vide peut être effectuée avec git init.

CB Bailey
la source
15
Juste au cas où quelqu'un se demanderait, j'ai remplacé l'URL par le chemin vers un répertoire de référentiel Git, et cela a parfaitement fonctionné.
Aupajo
48
Vous pouvez également nommer le nom de la succursale dans le nouveau référentiel: git push url://to/new/repository.git branch-to-move:new-branch-name
Yves Van Broekhoven
4
Le commentaire ci-dessus d'Yves est correct, sinon vous n'aurez aucun maître et le processus de clonage se terminera warning: remote HEAD refers to nonexistent ref, unable to checkout.. Si déjà à ce stade, allez-y git checkout -b branch-to-moveet vous êtes en sécurité ou allez simplement avec git checkout -b mastervotre branche principale :)
Ain Tohvri
git checkout -b mastera résolu mon problème, il était à l'écran error: src refspec master does not match any.(je me demande seulement pourquoi je n'ai pas vu le nom de la branche où j'étais) Merci
kangkyu
3
Au cas où cette réponse serait déroutante pour vous aussi, voici comment j'y ai donné un sens afin de la faire fonctionner: 1) dans votre terminal, soyez dans le répertoire qui contient le dépôt et la branche que vous voulez transformer en un nouveau dépôt; 2) le urldevrait être une url git, comme [email protected]: brianzelip / groceries.git; 3) branch-to-moveest la branche du repo actuel que vous souhaitez transformer en nouveau repo; 4) new-branch-nameest le nom que vous voulez pour la nouvelle branche dans le nouveau repo en cours de création, à savoir: master.
Brian Zelip
19

Cela conservera l'historique de toutes les branches, mais fera pointer votre copie vers une branche en particulier:

git clone -b newbranch CurrentRepo NewRepo

Cela ne «bouge» rien, fait juste une copie.

Damon
la source
2
Il convient de noter que clone -bc'est nouveau. Il nécessite git> = 1.6.5 (publié en octobre 2009).
CB Bailey
J'ai eu du mal à faire fonctionner cela, mais c'était avant de voir le message de Charles Bailey.
Aupajo