Comment renommer ma branche «master» Git en «release»?

116

Nous aimerions appliquer une nouvelle politique pour nos projets selon laquelle la branche principale s'appellera désormais la branche de version pour garantir que la manière dont la branche doit être utilisée est plus claire. Naturellement, nous développerons et publierons également des branches candidates.

Je comprends que je peux renommer la branche principale localement en utilisant simplement ce qui suit:

git branch -m master release

Cependant, ce n'est que localement. Même si je pousse ceci vers la télécommande, la HEAD pointe toujours vers la branche principale distante. Je veux me débarrasser complètement de la branche principale et faire en sorte que la branche locale par défaut lors du clonage initial soit libérée.

Comment puis-je atteindre cet objectif?

Il semble que puisque l'origine se trouve sur un serveur Gitorious , j'obtiens des erreurs lors de la suppression de la branche principale. J'essaie de voir maintenant s'il est possible de changer cela afin que la branche par défaut soit «release».

Kyle Hayes
la source
2
Heh, c'est juste. La valeur à long terme est suffisamment élevée pour au moins essayer.
Kyle Hayes
Possible duplication de Comment renommer une branche Git locale?
Vineet Jain
Certains serveurs (distants) refusent de supprimer la branche "par défaut" (c'est le cas avec Github). Il faut donc peut-être aller sur le serveur pour choisir une autre branche "par défaut" pour le temps des opérations ... Sur Github, cela peut se faire dans la vue "branche".
jehon
1
git branchprend désormais en charge un --movedrapeau git-scm.com/docs/git-branch#Documentation/git-branch.txt---move
alxndr

Réponses:

141
git checkout -b release master    # Create and switch to the release branch
git push -u origin release        # Push the release branch to the remote and track it
git branch -d master              # Delete local master
git push --delete origin master   # Delete remote master
git remote prune origin           # Delete the remote tracking branch

Veuillez noter que si vous utilisez GitHub, vous devrez d'abord modifier votre branche "par défaut" sur GitHub après l'étape 3:

Dans votre référentiel sur github.com, allez dans ParamètresBranchesBranche par défaut . Modifiez-le en version libérée , puis effectuez le reste des étapes.

Adam Dymitruk
la source
3
Quand je tente git push --delete, j'obtiens l'erreur suivante: suppression de la branche actuelle interdite
Kyle Hayes
8
Vous utilisez github ou quelque chose de similaire, vous devez créer une autre branche par défaut: matthew-brett.github.com/pydagogue/gh_delete_master.html ou simplement laisser master là et l'ignorer.
Adam Dymitruk le
Ouais, nous avons un exemple gitorieux. Voyons si c'est une option.
Kyle Hayes
Il semble que les crochets de validation gitoriaux interdisent la suppression de la branche principale - sans raison valable que je puisse voir: /
fge
1
La même chose ! [remote rejected] branch (deletion of the current branch prohibited) se produira avec Bitbucket. Basculez le «référentiel principal» dans l'écran des paramètres (sous l'icône d'engrenage).
dnfehren
13

Découvrez votre branche principale

git checkout master

Créez votre branche de version et basculez-y:

git branch release
git checkout release

Poussez ça sur le serveur

git push origin release

Supprimer la référence de branche principale sur le serveur

git push origin :master

Supprimer la branche principale locale

git branch -d master
Jeff Ferland
la source
2
Je peux dire par ces étapes que je vais rencontrer la même erreur que celle mentionnée ci-dessus.
Kyle Hayes du
@KyleHayes C'est un problème de configuration du serveur. Bien que ce soit de cette façon par défaut, le processus de modification doit être apparent pour l'utilisateur ou facilement découvrable sur Stackoverflow
Jeff Ferland
Vous devez passer à une autre branche avant de pouvoir supprimer une branche.
martinedwards
5

Remarque: Cette réponse est destinée aux serveurs Git auto-hébergés sur lesquels vous avez un accès en ligne de commande.

Étant donné que tenter de supprimer le remote masterd'un client n'est en effet pas autorisé et que je suppose que l'interdiction a du denyDeleteCurrentsens, je ne voudrais pas changer ce paramètre.

Cependant, j'ai trouvé que le moyen le plus simple de renommer votre maître ssi vous avez un accès en ligne de commande au serveur distant est d'exécuter la commande renommer directement à distance.

Cela a fonctionné pour moi:

  1. Connectez-vous via SSH au serveur git distant
  2. Accédez au dossier xxx.git de votre projet
  3. courir: git branch -m master release

Désormais, le référentiel distant utilise releasecomme branche par défaut et tout utilisateur git clonede ce référentiel depuis n'importe quel client va extraire la branche de publication par défaut.

Il est également très utile après avoir configuré un référentiel nu pour le configurer selon vos besoins.

Christopher Lörken
la source
3

Comme indiqué précédemment par d'autres, le problème ici est Gitorious, qui ne vous permet pas de supprimer la branche HEAD par défaut. Vous avez deux options pour contourner ce problème. La première consiste à se connecter au serveur Gitorious (avec ssh), à trouver le référentiel Git sur le serveur de fichiers et à ajouter:

[receive]
        denyDeleteCurrent = warn

à la configuration.

Une option plus simple consiste simplement à changer la branche par défaut. Accédez à votre référentiel dans l'interface Web de Gitorious, appuyez sur "Modifier le référentiel", et définissez "Head Change la référence symbolique vers laquelle pointe la HEAD dans le référentiel Git:". Après avoir fait cela, vous pouvez supprimer la branche principale.

Aleksander Blomskøld
la source
2

Si vous rencontrez ce problème avec GitHub , suivez les étapes jusqu'à la suppression de la branche à distance. Il ne vous laissera pas faire cela. Puis connectez-vous à l'interface Web et sur le référentiel, allez dans ParamètresBranchesBranche par défaut . Remplacez-le par la nouvelle branche et effectuez le reste des étapes.

Gru
la source
1

Idéalement, vous souhaitez configurer le suivi, procédez comme suit:

git push origin HEAD:release
git checkout --track origin/release

Maintenant, voulez-vous supprimer les autres?

git branch -d master
git push origin :master

Facile!

gahooa
la source
J'ai eu la même erreur que celle que j'ai postée dans le commentaire de @ Adam lorsque je suis arrivé à la commande git push origin: master.
Kyle Hayes
0

Puisque vous avez fini de renommer les branches, pour régler la tête sur releasepour la télécommande

git remote set-head origin release

Ensuite, pour supprimer la masterbranche à distance, vous devrez être l'administrateur, au moins sur GitHub. Veuillez consulter cet article pour plus d'informations.

zyy
la source