Renommer une branche dans GitHub

297

Je viens de renommer ma succursale locale en utilisant

git branch -m oldname newname

mais cela ne renomme que la version locale de la branche. Comment puis-je renommer celui sur GitHub?

améliorer
la source
5
doublon possible de git: renommer la branche distante
Andrew Marshall
Avez-vous vérifié les paramètres d'administration? Mon projet actuel sur github n'a pas de branches mais vous pouvez renommer le référentiel là-bas, donc je pense que vous pourriez également renommer des branches.
evanmcdonnal
12
@evanmcdonnal Non, vous ne pouvez pas renommer une branche Git à partir du site GitHub.
Andrew Marshall
Les réponses à cette question sont presque universellement erronées. La question n'est pas de savoir comment renommer une branche git, c'est comment renommer une branche github . Beaucoup de choses sur github sont liées à une branche, ce qui signifie que toute réponse doit couvrir ces choses. Par exemple, renommer master en main
gman
@gman Pour ce que ça vaut, il semble que ces réponses répondent à l'esprit de la question du PO. La question du PO n'a peut-être pas été parfaitement formulée, d'un point de vue technique exigeant, ou la question pertinente que vous examinez actuellement. Mais alors, cette question ne vient pas d'un fond technique profond de git ou GitHub. Dans cette perspective, on peut considérer cela comme une question "débutante" ou élémentaire. En tant que tel, il est formulé et répondu de manière appropriée pour ce public. Frustrant, bien sûr, mais je pense que ce Q, ces réponses sont appropriées / pertinentes, en particulier pour les Q avant l'utilisation de BLM git / Hub.
SherylHohman

Réponses:

309

Comme mentionné, supprimez l'ancien sur Github et repoussez, bien que les commandes utilisées soient un peu plus verbeuses que nécessaire:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

Facile. Disséquant un peu les commandes, la commande git push est essentiellement:

git push <remote> <local_branch>:<remote_branch>

Donc, faire un push sans local_branch spécifié signifie essentiellement "ne rien prendre de mon dépôt local et en faire la branche distante". J'ai toujours pensé que c'était complètement compliqué, mais c'est comme ça que ça se passe.

Edit: à partir de Git 1.7, il existe une autre syntaxe pour supprimer une branche distante:

git push origin --delete name_of_the_remote_branch

Edit: Comme mentionné par @ void.pointer dans les commentaires

Notez que vous pouvez combiner les 2 opérations push:

git push origin :old_branch new_branch

Cela supprimera à la fois l'ancienne branche et poussera la nouvelle.

Cela peut être transformé en un alias simple qui prend la branche distante d'origine et le nouveau nom de branche comme arguments, dans ~/.gitconfig:

[alias]
    branchm = "!git branch -m $2 $3 && git push $1 :$2 $3 -u #"

Usage:

git branchm origin old_branch new_branch

Notez que les arguments positionnels dans les commandes shell étaient problématiques dans les anciennes versions (antérieures à 2.8?) De git, donc l'alias peut varier selon la version de git. Voir cette discussion pour plus de détails.

Adam Parkin
la source
32
Notez que vous pouvez combiner les 2 opérations de poussée: git push origin :old_branch new_branch. Cela supprimera à la fois l'ancienne branche et poussera la nouvelle.
void.pointer
4
Y a-t-il une raison pour laquelle la nouvelle branche ne peut pas être poussée avant de supprimer l'ancienne? Personnellement, je préfère les processus où l'opération de suppression se produit après la réussite de l'opération de création, juste au cas où quelque chose se passe mal.
jmort253
7
Ne marche pas. Il remettra simplement la branche sur Github avec son ancien nom.
geoff
1
@AdamParkin 1. git branch -m new_branch(renommer old_branch en new_branch) 2. git commit -m 'msg', 3. git push4. Mhmm, old_branch apparaît dans Github, question Google et je suis amené à votre réponse 5. git push origin :old_branch(dit qu'il a été supprimé) 6. git push origin new_branch... complète puis dit * [new branch] new_branch -> old_branch. Retournez à Github et réapparaissez old_branch. Si je supprime dans l'interface utilisateur Web de Github, j'ai la possibilité de "Restaurer", il semble donc que pousser le new_branch est simplement en train de restaurer.
Kcvin
2
Une chose à savoir est que lorsque vous renommez la branche, toutes les demandes d'extraction que vous avez ouvertes par rapport à cette demande d'extraction seront automatiquement fermées. Nous avons dû renommer la branche en arrière, puis rouvrir manuellement toutes les demandes d'extraction ....
jmort253
24

Les commandes suivantes ont fonctionné pour moi:

git push origin :old-name-of-branch-on-github
git branch -m old-name-of-branch-on-github new-name-for-branch-you-want
git push origin new-name-for-branch-you-want
Taimoor Changaiz
la source
C'est la brève réponse qui fonctionne. BTW, la première commande pourrait également être mise comme dernière dans la réponse.
Eric Wang
cette réponse couvre git not github
gman
1
En fait, je viens de le faire deux fois et cela a fonctionné sur github.
spozun
17

J'ai trouvé 3 commandes pour changer le nom de votre branche git, et ces commandes sont un moyen plus rapide de le faire

git branch -m old_branch new_branch         # Rename branch locally    
git push origin :old_branch                 # Delete the old branch    
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

Si vous avez besoin étape par étape, vous pouvez lire cet excellent article

Comment renommer les branches locales et distantes Git

Hazarapet Tunanyan
la source
1
git push --set-upstreamest la partie la plus importante si vous changez le nom de la branche localement à l'aide de l'application github avant de supprimer la branche distante.
Louis Yang
cette réponse couvre git not github
gman
12

Supprimez simplement l'ancienne branche et créez-en une nouvelle.

Exemple (renommer uniquement la branche distante):

git push origin :refs/heads/oldname
git push origin newname:refs/heads/newname

Vous devriez également probablement renommer la branche locale et modifier les paramètres pour savoir où pousser / tirer.

Vi.
la source
1
Le 2e commandement ne devrait-il pas l'être git push origin newname:refs/heads/newname? master et newname peuvent ne pas pointer vers le même commit.
Steve Folly
"master" est juste comme exemple, va changer maintenant.
Vi.
Peut-être que l'ordre de deux commandes devrait être inversé (c'est-à-dire télécharger d'abord le nouveau nom, puis supprimer l'ancien)
Vi.
cette réponse couvre git not github
gman
@gman, ne le renomme-t-il pas Git également en tant que Github?
Vi.
9

Renommer les branches dans git local et distant

1. Renommez votre succursale locale.

Si vous êtes sur la branche que vous souhaitez renommer:

git branch -m new-name

Si vous êtes dans une autre branche:

git branch -m old-name new-name

2. Supprimez l'ancienne branche distante et appuyez sur la nouvelle branche locale.

git push origin :old-name new-name

3. Réinitialisez la branche amont pour la branche locale de nouveau nom.

Passez à la succursale puis:

git push origin -u new-name

Donc, la conclusion est

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name
Abdelrahman Mohamed
la source
cette réponse couvre git not github
gman
C'est pour git et GitHub est sous git donc ça va marcher et ça marche avec moi et avec les autres
Abdelrahman Mohamed
Ça ne marche pas. Essayez les première et deuxième étapes git branch -m new-name && git push origin :master new-name. Cela échouera. Si cette réponse ne concerne que git et non github, cette question est un double de plusieurs autres questions et doit être fermée. S'il s'agit vraiment de github, la réponse doit couvrir github. Cette réponse n'est pas.
gman
2

Voici ce qui a fonctionné pour moi:

1.) Créez d'abord la nouvelle branche: git push github newname: refs / heads / newname

2.) Sur le site github, allez dans les paramètres et changez la branche par défaut en newname

3.) Supprimer l'ancien git push github --delete oldname

Wiley
la source
0
  1. Téléchargez Atlassian SourceTree (gratuit).
  2. Importez votre clone local du référentiel.
  3. Cliquez avec le bouton droit sur votre branche à renommer, dans la barre latérale. Sélectionnez "Renommer la branche ..." dans le menu contextuel et renommez-le.
  4. Poussez à l'origine.
Ingénieur
la source
Merci, mais j'ai dû passer à la succursale et l'importer.
Flash Sheridan
1
cette réponse couvre git not github
gman
0

Cet article montre comment le faire très facilement.
1. Pour renommer une branche Git locale, nous pouvons utiliser la commande Git branch -m pour modifier le nom:
git branch -m feature1 feature2
2. Si vous cherchez simplement la commande pour renommer une branche Git distante, c'est celle-ci "
git push -u origin feature2:feature3
Vérifiez que vous n'avez pas avant de faire cela. Vous pouvez le faire avec git tag.

Daniel Kobe
la source
cette réponse couvre git not github
gman
0

Une autre façon consiste à renommer les fichiers suivants :

  1. naviguer dans le répertoire de votre projet
  2. renommer .git/refs/head/[branch-name]en.git/refs/head/new-branch-name
  3. renommer .git/refs/remotes/[all-remote-names]/[branch-name]en.git/refs/remotes/[all-remote-names]/new-branch-name

Renommez head & remotes à la fois sur votre PC local et sur les origines / serveurs distants

La branche est maintenant renommée (locale et distante!)


Attention

Si votre nom de branche actuel contient des barres obliques ( /), git créera les répertoires comme ceci:

nom de la branche actuelle: "awe/some/branch"

  • .git/refs/head/awe/some/branch
  • .git/refs/remotes/[all-remote-names]/awe/some/branch

nom de la branche souhaitée: "new-branch-name"

  1. naviguer dans le répertoire de votre projet
  2. copier le branchfichier depuis.git/refs/*/awe/some/
  3. mettez-le .git/refs/head/.
  4. copier le branchfichier de tous.git/refs/remotes/*/awe/some/
  5. les mettre .git/refs/remotes/*/.
  6. renommer tous les branchfichiers opiés en new-branch-name.
  7. vérifiez si la structure des répertoires et des fichiers ressemble maintenant à ceci:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. faites de même sur tous vos origines / serveurs distants (s'il existe)
    • info : sur les serveurs distants, il n'y a généralement pas de répertoires refs / remotes / * parce que vous êtes déjà sur un serveur distant;) (enfin peut-être que dans les configurations avancées de git, cela pourrait être possible, mais je ne l'ai jamais vu)

La branche est maintenant renommée de awe/some/branchà new-branch-name(locale et distante!)

Les répertoires du nom de la branche ont été supprimés.


Info: Cette méthode n'est peut-être pas la meilleure, mais elle fonctionne toujours pour les personnes qui pourraient avoir des problèmes avec les autres méthodes

Iyashi
la source
cette réponse couvre git not github
gman
0

Dans mon cas, j'avais besoin d'une commande supplémentaire pour obtenir ma branche renommée .
git branch --unset-upstream
origin newname

(Pour faciliter la frappe), j'ai d'abord git checkout oldname.
Exécutez ensuite ce qui suit:

git branch -m newname
git push origin :oldname ou ougit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

Cette étape supplémentaire peut être nécessaire uniquement parce que j'ai (tendance à) configurer le suivi à distance sur mes succursales via . De cette façon, après avoir vérifié, je n'ai ensuite besoin que de type plutôt quegit push -u origin oldnameoldnamegit pushgit push origin oldname

Si je n'utilise PAS la commande git branch --unset-upstreamavant git push origin newbranch, git recrée oldbranch et pousse newbranchpour origin oldbranch- vaincre mon intention.

SherylHohman
la source
cette réponse couvre git not github
gman
@gman Point pris. Ma solution utilise git localement pour renommer une branche sur GitHub, à distance, après l'avoir renommée sur la copie git locale du référentiel GitHub. Donc, peut-être que cela pourrait être considéré comme une solution spécialisée, lorsque vous souhaitez utiliser la ligne de commande, plutôt que l'interface du site Web GitHub, et que vous disposez d'un clone local que vous souhaitez également mettre à jour. Merci d'avoir souligné cette distinction et d'avoir précisé que cette réponse est pour un cas particulier, plutôt qu'une solution générale.
SherylHohman
Le problème est que github lie les fonctionnalités aux branches. Essayez de renommer master en main et vos instructions échoueront.
gman
-1

Les commandes suivantes renomment la branche localement, supprimez l'ancienne branche sur l'emplacement distant et appuyez sur la nouvelle branche, en définissant la branche locale pour suivre la nouvelle télécommande:

git branch -m old_branch new_branch
git push origin :old_branch
git push --set-upstream origin new_branch
Pooja Mane
la source
Bien que votre extrait de code puisse résoudre le problème, vous devez décrire le but de votre code (comment il résout le problème). En outre, vous voudrez peut-être vérifier stackoverflow.com/help/how-to-answer
Ahmad F
cette réponse couvre git not github
gman
-1

C'est aussi simple que ça . Afin de renommer git branch localement et à distance, utilisez cet extrait (testé et fonctionne comme un charme):

git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>

Explication:

  1. Renommer l'étape:

    Référence Git: avec une option -m ou -M , sera renommé en. S'il y avait un reflog correspondant, il est renommé pour correspondre et une entrée de reflog est créée pour se souvenir du changement de nom de la branche. S'il existe, -M doit être utilisé pour forcer le changement de nom.

  2. Étape de suppression:

    Référence Git: git push origin: experimental Recherchez une référence qui correspond à experimental dans le référentiel d'origine (par exemple, refs / heads / experimental) et supprimez-la.

  3. Mise à jour sur l'étape de dépôt à distance (référence en amont pour le suivi):

    Référence Git: --set-upstream Pour chaque branche qui est à jour ou poussée avec succès, ajoutez une référence en amont (tracking), utilisée par git-pull sans argument [1] et d'autres commandes. Pour plus d'informations, consultez branch..merge dans git-config [1].

avivamg
la source
cette réponse couvre git not github
gman
-1

3 étapes simples

  • tête d'origine push git

  • git branch -m old-branch-name nouveau-branch-name

  • tête d'origine push git

Martin Mungai
la source
cette réponse couvre git not github
gman
Une fois que vous appuyez, il met à jour github 🤔
Martin Mungai Il y a
-1

Sur la branche git, exécutez git branch -m old_name new_name Ceci modifiera le nom de la branche sur votre origine repo git push origin: old_name new_name Cela poussera le nom modifié à distance et supprimera l'ancienne branche git push origin -u new_name Définit la branche locale à suivre branche distante. Cela résout le problème

Pape François
la source
cette réponse couvre git pas github
gman