web-dev-qa-db-fra.com

Comment copier le contenu d'une branche vers une nouvelle branche locale?

J'ai travaillé sur une branche locale et j'ai également transmis les modifications à distance. Je veux annuler les modifications apportées à cette branche et y faire autre chose, mais je ne veux pas perdre le travail complètement. Je pensais à quelque chose comme créer une nouvelle branche localement et copier l'ancienne branche, puis je peux annuler les modifications et continuer à travailler sur l'ancienne branche. Y a-t-il une meilleure façon peut-être? Ou comment je fais ça?

229
serengeti12
git checkout old_branch
git branch new_branch

Cela vous donnera une nouvelle branche "new_branch" avec le même état que "old_branch".

Cette commande peut être combinée à ce qui suit:

git checkout -b new_branch old_branch
375
Daniel Hilgarth
git branch copyOfMyBranch MyBranch

Cela évite l'acte potentiellement long et inutile de vérifier une branche. Rappelez-vous qu'une extraction modifie "l'arbre de travail", ce qui peut prendre un certain temps s'il est volumineux ou s'il contient des fichiers volumineux (images ou vidéos, par exemple).

49
Lyle Z

Avec Git 2.15 (T4 2017), "git branch" a appris "-c/-C" pour créer une nouvelle branche en copiant une branche existante.

Voir commit c8b2cec (18 juin 2017) par var Arnfjörð Bjarmason (avar) .
Voir commit 52d59cc , commit 5463caa (18 juin 2017) par Sahil Dua (sahildua2305) .
(Fusionnée par Junio ​​C Hamano - gitster - dans commit 3b48045 , 3 octobre 2017)

branch: ajoute une option --copy (-c) pour aller avec --move (-m)

Ajoutez la capacité à --copy une branche, ainsi qu’à son reflog et à sa configuration, le même mécanisme sous-jacent que l’option --move (-m) à l’exception du refog et de la configuration qui est copié au lieu d’être déplacé.

Ceci est utile pour par exemple copier une branche de sujet dans une nouvelle version, par exemple. work à work-2 après avoir soumis la rubrique work à la liste, tout en conservant toutes les informations de suivi et toute autre configuration associée à la branche, et contrairement à --move en conservant déjà l'autre -soumis branche autour pour référence.

Remarque: lorsque vous copiez une branche, vous restez sur votre branche actuelle.
Comme l'explique Junio ​​C Hamano:

Lorsque vous créez une nouvelle branche B en copiant la branche A qui est la branche actuelle, elle met également à jour HEAD pour qu'elle pointe vers la nouvelle branche.
Cela a probablement été fait ainsi parce que "git branch -c A B" a greffé son implémentation sur "git branch -m A B",

Cela ne correspond pas aux attentes habituelles.
Si j'étais assis sur une chaise bleue et que quelqu'un venait la repeindre en rouge, j'accepterais de finir assis sur une chaise qui est maintenant rouge (je peux aussi me lever, au lieu de cela, car est ma chaise bleue préférée).

Mais si quelqu'un crée une nouvelle chaise rouge, inspirée de la chaise bleue sur laquelle je suis assis, je ne m'attends pas à être éjecté de la chaise bleue et à finir assis sur la nouvelle chaise rouge.

33
VonC