Comment puis-je copier le contenu d'une branche à une nouvelle branche locale?

J'ai travaillé sur une branche locale et également poussé les modifications apportées à distance. Je veux annuler les modifications sur cette branche et faire autre chose dessus, mais je ne veux pas perdre complètement le travail. Je pensais à quelque chose comme créer une nouvelle branche localement et copie de la vieille branche, alors je peux annuler les modifications et continuer à travailler sur la vieille branche. Y a-t-il un meilleur moyen peut-être? Ou comment dois-je faire?

194
demandé sur Jason S 2013-02-21 13:41:39

3 réponses

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
311
répondu Daniel Hilgarth 2013-02-21 10:00:35
git branch copyOfMyBranch MyBranch

Cela évite l'acte potentiellement fastidieux et inutile de vérifier une branche. Rappelons qu'une caisse modifie "l'arbre de travail", ce qui peut prendre beaucoup de temps s'il est volumineux ou contient des fichiers volumineux (images ou vidéos, par exemple).

42
répondu Lyle Z 2015-04-12 22:18:34

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

Voir commettre c8b2cec (18 Juin 2017) par Ævar Arnfjörð Bjarmason (avar).
Voir commettre 52d59cc, s'engager 5463caa (18 Juin 2017) par Sahil Dua (sahildua2305).
(Fusionné par Junio C Hamano -- gitster -- dans commettre 3b48045, 03 Oct 2017)

branch: ajoutez un --copy (-c) option pour aller avec --move (-m)

Ajouter la possibilité de {[6] } une branche et son reflog et sa configuration, cela utilise le même mécanisme sous-jacent que le --move (-m) option sauf que le reflog et la configuration sont copiés au lieu d'être déplacés.

Ceci est utile pour, par exemple, copier une branche de sujet dans une nouvelle version, par exemple work à work-2 après avoir soumis le sujet work à la liste, alors que préserver toutes les informations de suivi et toute autre configuration qui va avec la direction générale, et contrairement à --move garder l'autre déjà soumis branche autour pour la référence.

Remarque: lors de la copie d'une branche, vous restez sur votre branche actuelle.
Comme L'explique Junio C Hamano:

Lors de la création d'une nouvelle branche B en copiant la branche {[18] } qui arrive à être la branche actuelle, il met également à jour HEAD pour pointer vers la nouvelle direction.
Il a probablement été fait de cette façon parce que "git branch -c A B " a piggybacked son implémentation sur "git branch -m A B",

Cela ne correspond pas à l'attente habituelle.
Si j'étais assis sur une chaise bleue, et que quelqu'un vient la repeindre en rouge, j'accepterais de finir Assis sur une chaise qui est maintenant rouge (je suis aussi OK pour debout, à la place, car il n'y a plus ma chaise bleue préférée).

Mais si quelqu'un crée une nouvelle chaise rouge, en la modélisant après le bleu chaise sur laquelle je suis assis, Je ne m'attends pas à être démarré du bleu chaise et se terminant sur Assis sur le nouveau rouge un.

17
répondu VonC 2017-10-14 23:12:42