Changer de nom de branche dans git

103

Il peut y avoir plus d'une façon de poser cette question, voici donc une description du problème. Je travaillais sur master et j'ai commis des trucs, puis j'ai décidé que je voulais mettre ce travail en attente. J'ai sauvegardé quelques commits, puis je me suis ramifié avant de commencer mon travail de merde. Pratiquement cela fonctionne très bien, j'ai juste maintenant une branche différente comme branche de développement principale. Je me demande comment je pourrais changer les choses donc je travaille à nouveau sur master mais il n'a pas mon travail indésirable et j'ai dit que le travail était sur une branche différente.

Cela pourrait être demandé / résolu de différentes manières: Comment renommer ma branche master en autre chose, puis renommer quelque chose d'autre en master? Comment sauvegarder master et faire en sorte que tous les commits que j'ai sauvegardés soient sur une branche différente?

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

Daniel Benamy
la source

Réponses:

144

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

git branch -m master crap_work
git branch -m previous_master master
Greg Hewgill
la source
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"]pour que le maître puisse toujours se synchroniser avec origin/master. Bien entendu, l'état des deux pensions était tel que cela avait encore du sens.
Éponyme du
3
Cela ne renomme pas les branches sur le dépôt distant, uniquement sur le dépôt local.
smohadjer
1
@smohadjer Pour renommer les télécommandes, vous devez faire git push -uf origin masteret git push -u origin crap_work.
zyy le
31

Je pense que vous devriez envisager une stratégie de développement différente pour éviter des 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 principale. Quels 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 appliquer les modifications aux référentiels publics:

git push pu topic / topic_name

ou finalement simplement le fusionner avec ma branche principale:

git checkout master && git merge topic / topic_name

Si vous avez vraiment besoin de revenir à un point plus ancien et de le définir comme votre maître, vous pouvez renommer la branche actuelle en autre chose, puis vérifier une version plus ancienne pour être votre maître:

 git branch -m master indésirable
 git co -b master old_sha1_value
Brian Riehman
la source
C'est une bonne politique. Et en y réfléchissant, j'ai vu cela pratiqué ailleurs. Merci.
Rimian
14

Commencez master, créez une branche appelée in-progress, puis réinitialisez masterà un commit antérieur.

$ git branch in-progress
$ git reset --hard HEAD^
Ted Percival
la source
1
Je ne vois aucune raison pour que cela ait été rejeté. Je l'ai fait moi-même à quelques reprises, avant d'apprendre la branche -m et de réaliser que master n'était pas immuablement lié en tant que nom permanent d'une branche.
skiphoppy
7

C'est relativement simple:

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
olliej
la source
1
Oui, le dernier est complètement facultatif - git checkout -bcrée une branche et la rend active.
BorisOkunskiy
0

Cela définira votre maître à n'importe quel point en une seule étape:

git checkout -B master new_point
Penghe Geng
la source