2008-08-22 14 views
98

Il y a peut-être plusieurs façons de poser cette question, alors voici une description du problème. Je travaillais sur le master et j'ai commis quelques problèmes, puis j'ai décidé de mettre ce travail en attente. J'ai sauvegardé quelques commits et ensuite ramifié avant que je commence mes travaux de merde. Pratiquement, cela fonctionne très bien, j'ai maintenant une branche différente comme ma branche de développement principale. Je me demande comment je pourrais changer les choses, alors je travaille à nouveau sur le master, mais il n'y a pas de travail indésirable et je dis que le travail se fait sur une branche différente. Comment peut-on renommer ma branche principale en autre chose et renommer autre chose en master? Comment puis-je sauvegarder le master et faire en sorte que toutes les validations que j'ai sauvegardées soient sur une branche différente?Changer de nom de branche en git

Merci pour toutes les réponses (rapides)! Ils sont tous bons.

Répondre

140

En plus des autres commentaires, vous pouvez trouver le commutateur -m (move) vers git-branch utile. Vous pouvez renommer votre ancien maître à quelque chose d'autre, puis renommer votre nouvelle branche à maîtriser:

git branch -m master crap_work 
git branch -m previous_master master 
+1

Cela fonctionne également lorsque vous renommez votre branche actuelle! :) – Tarrasch

+0

En fonction de votre flux de travail, vous pouvez également modifier les références de branche dans .git/config. J'ai changé '[branch" crap_work "]' pour lire '[branch" master "]' afin que master soit toujours synchronisé avec 'origin/master'. Bien sûr, l'état des deux repos était tel que cela avait encore du sens. – Eponymous

+1

Ceci ne renomme pas les branches sur le repo distant, seulement sur le repo local. – smohadjer

8

Cela est relativement facile:

git checkout -b fake_master master # fake_master now points to the same commit as master 
git branch -D master    # get rid of incorrect master 
git checkout -b master real_master # master now points to your actual master 
git checkout master    # optional -- switch on to your master branch 
+1

Yeap, le dernier est totalement facultatif - 'git checkout -b' crée une branche ** et ** le rend actif. – incarnate

15

Démarrer sur master, créez une branche appelée in-progress, puis réinitialiser master à une version antérieure commettras.

$ git branch in-progress 
$ git reset --hard HEAD^ 
+1

Je ne vois aucune raison pour que cela ait été rejeté. Je l'ai fait moi-même quelques fois, avant que j'apprenne l'existence de la branche et je me suis rendu compte que le maître n'était pas immuablement lié comme le nom permanent d'une branche. – skiphoppy

32

Je pense que vous devriez envisager une stratégie de développement différente pour éviter les problèmes comme celui-ci. Celui qui semble fonctionner le mieux pour moi est de ne jamais faire de développement directement sur ma branche maîtresse. Quelles que soient les changements que je fais, je crée toujours une nouvelle branche pour le nouveau code:

 
git checkout -b topic/topic_name master 

À partir de là, je peux pousser les changements dans les dépôts publics:

 
git push pu topic/topic_name 

ou éventuellement tout simplement fusionner en arrière avec ma branche principale:

 
git checkout master && git merge topic/topic_name 

Si vous avez vraiment besoin de revenir à un point plus dans le temps et mettre que votre maître, vous pouvez renommer la branche courante à autre chose et puis vérifier une version plus ancienne d'être votre maître:

 
git branch -m master junk 
git co -b master old_sha1_value 
+0

C'est une bonne politique. Et à y penser, j'ai vu cela pratiqué ailleurs. Merci. – Rimian

0

Cela va régler votre maître à tout moment en une seule étape:

git checkout -B master new_point 
Questions connexes