Comment renommer une branche Git locale?

Réponses:

13740

Si vous souhaitez renommer une branche alors qu'elle pointe vers une branche, procédez comme suit:

git branch -m <oldname> <newname>

Si vous souhaitez renommer la branche actuelle, vous pouvez faire:

git branch -m <newname>

Une façon de s'en souvenir -mest de "déplacer" (ou mv), c'est ainsi que vous renommez les fichiers. L'ajout d'un alias peut également aider. Pour ce faire, exécutez ce qui suit:

git config --global alias.rename 'branch -m'

Si vous utilisez Windows ou un autre système de fichiers insensible à la casse et que le nom ne comporte que des modifications de majuscule, vous devez utiliser -M, sinon git lèvera la branche existe déjà :

git branch -M <newname>
siride
la source
87
Ce que je voulais vraiment savoir, c'était si cela affecterait nécessairement la branche distante quand / si vous poussez
PandaWood
181
@PandaWood: il ajoutera la nouvelle branche lorsque vous poussez, mais ne supprimera pas l'ancienne branche. Si vous utilisez git push -f --mirror, il renommera la branche sur la télécommande, mais vous ne devez utiliser cette méthode que si la télécommande doit simplement être une copie de votre référentiel actuel. Voir aussi cette question: stackoverflow.com/questions/1526794/git-rename-remote-branch
siride
19
@PandaWood, cela dépend de la façon dont push.defaultest configuré. Par défaut ( matching), il poussera vers une télécommande dont le nom correspond. Vous auriez à faire git push origin <newname>:<oldname>ou vous allez créer une nouvelle branche distante. Cependant, si push.defaultest défini sur upstream, vous pouvez push origin headet les choses iront à l'ancien nom sur la télécommande.
Erin Stanfill
13
@ NightOwl888: le -m est probablement l'abréviation de "move", suivant la convention Unix d'utiliser le mvpour renommer les fichiers. La raison en est que le déplacement et le changement de nom, dans un système de fichiers inode basé sur un répertoire, sont entièrement équivalents.
siride
51
Le nom long de l' -moption est --move, par exemple, git branch --move masterrenomme la branche courante pour être appelée "maître".
robenkleene
445
git branch -m old_branch_name new_branch_name

La commande ci-dessus changera le nom de votre branche, mais vous devez être très prudent en utilisant la branche renommée, car elle fera toujours référence à l'ancienne branche en amont qui lui est associée, le cas échéant.

Si vous souhaitez insérer des modifications dans master après que votre branche locale a été renommée en new_branch_name (exemple de nom):

git push origin new_branch_name:master (maintenant les changements iront à la branche principale mais le nom de votre branche locale est new_branch_name)

Pour plus de détails, consultez « Comment renommer le nom de votre branche locale dans Git ».

Madhan Ayyasamy
la source
326

Pour renommer votre branche actuelle:

git branch -m <newname>
Jonathan
la source
159
Vous devrez utiliser -M pour renommer si vous modifiez uniquement la capitalisation, car git vous dira que la branche existe déjà.
cjspurgeon
289

Voici les étapes pour renommer la branche:

  1. Passer à la branche qui doit être renommée
  2. git branch -m <new_name>
  3. git push origin :<old_name>
  4. git push origin <new_name>:refs/heads/<new_name>

EDIT (12/01/2017): assurez-vous d'exécuter la commande git statuset vérifiez que la branche nouvellement créée pointe vers sa propre référence et non vers la plus ancienne. Si vous trouvez la référence à l'ancienne branche, vous devez désinstaller l'amont en utilisant:

git branch --unset-upstream
Milind Anantwar
la source
1
À quelle étape désarmerait-on l'amont? Avant l'étape 4?
Cyclonecode
1
C'est la meilleure réponse ici car elle décrit le processus complet pour terminer correctement un changement de nom
Chris Halcrow
212

Renommer la branche sera utile une fois votre branche terminée. Ensuite, de nouvelles choses arrivent, et vous souhaitez développer dans la même branche au lieu de la supprimer et de créer la nouvelle.

D'après mon expérience, pour renommer une branche locale et distante dans Git, vous devez suivre les étapes suivantes.

Citant de plusieurs États - Renommez une branche locale et distante dans git

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 en amont pour la nouvelle branche locale

git push origin -u new-name
trungk18
la source
1
Celui-ci a mieux fonctionné pour moi. Ici les 2 étapes m'ont donné les erreurs suivantes:error: dst ref refs/heads/<old-name> receives from more than one src.; error: failed to push some refs to 'git@uri:foo/bar.git'
Anto
1
Vous avez eu le problème lors de l'exécution de la commande, git push origin :old-name new-namenon?
trungk18
Oui exactement (désolé, je voulais dire "2ème étape", pas "2 étapes" - fatigué)
Anto
116

Jusqu'à présent, les réponses étaient correctes, mais voici quelques informations supplémentaires:

On peut renommer une branche en toute sécurité avec '-m' (déplacer), mais il faut faire attention avec '-M', car cela force le renommage, même s'il existe déjà une branche portant le même nom. Voici l'extrait de la page de manuel 'git-branch':

Avec une option -m ou -M, <oldbranch>sera renommé <newbranch>. S'il y <oldbranch>avait un reflog correspondant, il est renommé pour correspondre <newbranch>et une entrée de reflog est créée pour se souvenir du changement de nom de la branche. S'il <newbranch>existe, -M doit être utilisé pour forcer le changement de nom.

Vanchev
la source
2
Qu'arrive-t-il à la branche écrasée?
Kevin Dice
Elle est remplacée par le nouveau nom / branche. Par exemple, si vous avez les branches suivantes dans git: master b1 <- branche courante b2 après avoir fait 'git branch -M b2' vous n'aurez que: master b2 <- la branche courante b1 sera partie et si vous le souhaitez récupérer, vous devez le vérifier par son hachage. Vous pouvez le voir en tapant 'git reflog'. À votre santé.
Vanchev
Le -Mdrapeau est également utile pour forcer un changement de nom si vous corrigez simplement la casse du nom de la branche, par exemple en changeant myBranchen MyBranch. (Avec -m, git revient fatal: A branch named 'MyBranch' already exists.)
Jon Schneider
92

1. Renommer

Si c'est votre branche actuelle, faites

git branch -m new_name

S'il s'agit d'une autre branche que vous souhaitez renommer

git branch -m old_name new_name

2. Suivre une nouvelle branche distante

- Si votre branche a été poussée, après le changement de nom, vous devez la supprimer du référentiel Git distant et demander à votre nouveau local de suivre une nouvelle branche distante:

git push origin :old_name
git push --set-upstream origin new_name
Oss
la source
74

J'ai stupidement nommé une branche commençant par un trait d'union, puis j'ai vérifié master. Je ne voulais pas supprimer ma branche, j'avais du travail dedans.

Aucun de ces éléments n'a fonctionné:

git checkout -dumb-name

git checkout -- -dumb-name

"s, 's et \s n'ont pas aidé non plus. git branch -mne fonctionne pas.

Voici comment je l'ai finalement corrigé. Allez dans .git / refs / heads de votre copie de travail, trouvez le nom de fichier "-dumb-name", récupérez le hachage de la branche. Ensuite, cela le vérifiera, créera une nouvelle branche avec un nom sain et supprimera l'ancienne.

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name
Samuel Meacham
la source
8
Ne pourriez-vous pas simplement renommer le fichier en références / têtes?
android.weasel
Idem. Si vous devez creuser dans la structure du répertoire pour faire cette magie, allez jusqu'au bout et faites un 'mv - -dumb-name brilliant-name' Faites une 'git branch -av' et vous verrez une structure de répertoire de .git / refs. Ou peut-être 'grep -R ^ .git / refs' pour voir directement les hachages.
Dave X
2
Vous auriez probablement pu utiliserreflog
Code Whisperer
Honnêtement, si c'est la route que vous vouliez emprunter, j'éviterais (la confusion de l'OMI et potentiellement dangereux si vous ne savez pas ce que vous faites) de vous promener dans le répertoire .git en premier lieu, et je le ferais simplement avec certains des commandes normales avec une analyse "git log" (en utilisant des drapeaux appropriés pour afficher les branches et pour déterminer de quel shasum vous souhaitez extraire une nouvelle branche), puis faites-le. Ensuite, supprimez la branche au nom bancal. Je méprise ce git insiste sur le fait que vous devez comprendre tous ses rouages ​​internes pour faire certaines choses, mais apprécie grandement que vous puissiez faire ces choses.
Jon V
Il est plus difficile de créer une branche avec un mauvais nom dans 2.10.1+. Si vous le faites, vous pouvez utiliser git branch -v pour obtenir la version courte de hachage de vos branches (ajoutez -r pour remote). Vous pouvez ensuite utiliser git rev-parse <shorthash> pour obtenir le hachage complet si vous en avez besoin.
House of Dexter
67

Pour renommer une branche localement:

git branch -m [old-branch] [new-branch]

Maintenant, vous devrez également propager ces modifications sur votre serveur distant.

Pour pousser les modifications de l'ancienne branche supprimée:

git push origin :[old-branch]

Pour pousser les changements de création de nouvelle branche:

git push origin [new-branch]
aliasav
la source
57

Seulement trois étapes pour répliquer le changement de nom remotesur GitHub ainsi que sur:

Étape 1 git branch -m old_branchname new_branchname

Étape 2 git push origin :old_branchname new_branchname

Étape 3 git push --set-upstream origin new_branchname

Harry_pb
la source
2
J'ai également dû faire une chose supplémentaire: git push --set-upstream origin new_branchnamequi est mentionnée dans la réponse @Nomade
IbrahimShendy
2
Étape 3 non nécessaire. Tout était à jour après l'étape 2.
Dev
@Dev pas dans tous les cas Dev, j'ai dû mettre à jour récemment depuis l'utilisation de bitbucket et codecommit, l'étape 3 est nécessaire
Harry_pb
40

Renommez la branche à l'aide de cette commande:

git branch -m [old_branch_name] [new_branch_name]

-m: Il renomme / déplace la branche. S'il y a déjà une branche, vous obtiendrez une erreur.

S'il existe déjà une branche et que vous souhaitez renommer avec cette branche, utilisez:

 git rename -M [old_branch_name] [new_branch_name]

Pour plus d'informations sur l'aide, utilisez cette commande dans le terminal:

git branch --help

ou

man git branch
Hafiz Shehbaz Ali
la source
40

Les utilisateurs avancés de Git peuvent renommer manuellement en utilisant:

Rename the old branch under .git/refs/heads to the new name

Rename the old branch under .git/logs/refs/heads to the new name

Update the .git/HEAD to point to yout new branch name
Jethik
la source
34
  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
  1. Supprimez l'ancienne branche distante et appuyez sur la nouvelle branche locale.

git push origin :old-name new-name

  1. Réinitialisez la branche en amont pour la branche locale de nouveau nom. Passez à la succursale puis:

git push origin -u new-name

Ou pour un moyen rapide de le faire, vous pouvez utiliser ces 3 étapes:

# Renommer la succursale localement

git branch -m old_branch new_branch  

# Supprimer l'ancienne branche distante

git push origin :old_branch  

# Appuyez sur la nouvelle branche, définissez la branche locale pour suivre la nouvelle télécommande

git push --set-upstream origin new_branch   

Référence: https://www.w3docs.com/snippets/git/how-to-rename-git-local-and-remote-branches.html

badarshahzad
la source
cela fonctionne pour moi
Vazgen Manukyan
26

Voici trois étapes: Une commande que vous pouvez appeler à l'intérieur de votre terminal et changer le nom de la branche.

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 en avez besoin de plus: étape par étape, Comment changer le nom de la branche Git est un bon article à ce sujet.

Hazarapet Tunanyan
la source
25

Probablement comme mentionné par d'autres, il s'agira d'un décalage de cas dans la dénomination des branches.

Si vous avez une telle situation, je suppose que vous êtes sous Windows, ce qui vous mènera également à:

$ git branch -m CaseSensitive casesensitive
fatal: A branch named 'casesensitive' already exists.

Ensuite, vous devez faire une étape intermédiaire:

$ git branch -m temporary
$ git branch -m casesensitive

Rien de plus.

P4C
la source
1
Notez que cette situation peut également se produire sur un Mac, qui est également (exceptionnellement gênant) insensible à la casse dans son système de fichiers.
Jon V
Alternativement, vous pouvez utiliser -Mau lieu de -mpour effectuer ce type de «correction de casse» en un seul passage.
Jon Schneider
23

Essayer de répondre spécifiquement à la question (au moins le titre).

Vous pouvez également renommer la branche locale , mais continue de suivre l'ancien nom sur la télécommande.

git branch -m old_branch new_branch
git push --set-upstream origin new_branch:old_branch

Maintenant, lorsque vous exécutez git push, la old_branchréférence distante est mise à jour avec votre local new_branch.

Vous devez connaître et mémoriser cette configuration. Mais cela peut être utile si vous n'avez pas le choix du nom de la branche distante, mais vous ne l'aimez pas (oh, je veux dire, vous avez une très bonne raison de ne pas l'aimer!) Et préférez un plus clair nom de votre succursale locale.

En jouant avec la configuration d'extraction, vous pouvez même renommer la référence distante locale. c'est-à-dire, avoir un refs/remote/origin/new_branchpointeur ref vers la branche, c'est en fait le old_branchon origin. Cependant, je décourage fortement cela, pour la sécurité de votre esprit.

Pierre-Olivier Vares
la source
22

Changer la succursale localement est assez facile ...

Si vous êtes sur la branche dont vous souhaitez changer le nom, faites simplement ceci:

git branch -m my_new_branch

Sinon, si vous êtes sur masterou dans une autre branche que celle dont vous souhaitez changer le nom, faites simplement:

git branch -m my_old_branch my_new_branch

Aussi, je crée l'image ci-dessous pour le montrer en action sur une ligne de commande . Dans ce cas, vous êtes en mastersuccursale, par exemple:

Modifier le nom de la branche localement

Alireza
la source
21

Si vous êtes prêt à utiliser SourceTree (ce que je recommande fortement), vous pouvez cliquer avec le bouton droit sur votre branche et choisir «Renommer».

entrez la description de l'image ici

Marcin Szymczak
la source
20

Pour renommer la branche actuelle (sauf pour l'état HEAD détaché), vous pouvez également utiliser cet alias:

[alias]
    mvh = !sh -c 'git branch -m `git rev-parse --abbrev-ref HEAD` $1'
dentuzhik
la source
18

Une autre option consiste à ne pas utiliser du tout la ligne de commande. Les clients Git GUI tels que SourceTree enlèvent une grande partie de la courbe / douleur d'apprentissage syntaxique qui fait que des questions comme celle-ci sont parmi les plus vues sur Stack Overflow.

Dans SourceTree, faites un clic droit sur une branche locale dans le volet "Branches" sur la gauche et sélectionnez "Renommer ...".

Steve Chambers
la source
5
Je n'appellerais pas ça de la douleur. La commande git est très facile à utiliser, une fois que vous aurez vu cette réponse, vous ne reviendrez probablement jamais. Le problème est plus que, semble-t-il, la documentation de la ligne de commande git n'est pas assez intuitive.
Nearoo
1
C'est vrai, mais avec SourceTree, je n'ai presque jamais à me soucier de vérifier la documentation. Tout est généralement intuitif - faites un clic droit et voyez quelles sont les options. (BTW, je ne suis pas affilié avec eux en aucune façon - tout comme l'outil!)
Steve Chambers
17

Une façon simple 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

Pour en savoir plus, voyez ceci .

Nomade
la source
15

Comme vous ne voulez pas pousser la branche vers un serveur distant, cet exemple sera utile:

Supposons que vous ayez une branche existante appelée «my-hot-feature» et que vous souhaitiez la renommer «feature-15».

Tout d'abord, vous souhaitez modifier votre succursale locale. Cela ne pourrait pas être plus simple:

git branch -m my-hot-feature feature-15

Pour plus d'informations, vous pouvez visiter Renommer localement et à distance une succursale dans Git .

Tanah
la source
13

Git version 2.9.2

Si vous souhaitez modifier le nom de la succursale locale sur laquelle vous vous trouvez:

git branch -m new_name

Si vous souhaitez modifier le nom d'une autre branche:

git branch -m old_name new_name

Si vous souhaitez remplacer le nom d'une branche différente par un nom qui existe déjà:

git branch -M old_name new_name_that_already_exists

Remarque: La dernière commande est destructrice et renommera votre branche, mais vous perdrez l'ancienne branche avec ce nom et ces validations car les noms de branche doivent être uniques.

nikkypx
la source
11

Si vous souhaitez modifier le nom de la branche actuelle, exécutez:

git branch -m [old_branch] [new_branch]

Si vous souhaitez supprimer l'ancienne branche distante, exécutez:

git push origin :[old_branch]

Si vous souhaitez supprimer l'ancienne branche distante et créer une nouvelle branche distante, exécutez:

git push origin :old_branch new_branch
Arif
la source
6

Le changement de nom de branche Git peut être fait en utilisant:

  1. git branch -m oldBranch newBranch

  2. git branch -M oldBranch ExistingBranch

La différence entre -m et -M :

-m: si vous essayez de renommer votre branche avec un nom de branche existant en utilisant -m . Cela générera une erreur indiquant que la branche existe déjà. Vous devez donner un nom unique.

Mais,

-M: cela vous aidera à forcer le renommage avec un nom donné, même s'il existe. Ainsi, une branche existante sera entièrement remplacée par elle ...

Voici un exemple de terminal Git,

mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
  test
* test1
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -m test1 test
fatal: A branch named 'test' already exists.
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -M test1 test
mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
* test
mohideen@dev:~/project/myapp/sunithamakeup$
Mohideen bin Mohammed
la source
5

Pour les utilisateurs de Git GUI, cela ne pourrait pas être beaucoup plus simple. Dans l'interface graphique Git, choisissez le nom de la branche dans la liste déroulante de la boîte de dialogue "Renommer la branche" créée à partir de l'élément de menu Branche: Renommer, saisissez un nouveau nom et cliquez sur "Renommer". J'ai mis en évidence où trouver la liste déroulante.

Renommer une succursale Git locale

Ivan
la source
3

Si tu veux:

  • Renommez le référentiel Git, exécutez: git branch -m <oldname> <newname>
  • Supprimez l'ancienne branche en: git push origin: old-name new-name
  • Engagez-le en utilisant: git commit <newname>
    • puis appuyez sur en utilisant: git push origin new_branch_name:master
  • Si vous souhaitez vérifier l'état, utilisez: git status
  • Si vous souhaitez vérifier, utilisez: git checkout
Vineet Jain
la source
3

Toutes les réponses précédentes parlent de git branch -m . Bien sûr, c'est facile à utiliser, mais pour moi, il peut être un peu difficile de se souvenir d'une autre commande Git. J'ai donc essayé de faire le travail par la commande que je connaissais. Ouais, vous pouvez le deviner.

J'utilise git branch -b <new_branch_name>. Et si vous ne souhaitez pas enregistrer l'ancienne branche, vous pouvez maintenant l'exécuter git branch -D <old_branch_name>pour la supprimer.

Je sais que cela peut être un peu fastidieux, mais c'est plus facile à comprendre et à retenir. J'espère que cela vous sera utile.

Dai Kaixian
la source
Si vous ne parvenez pas à vous souvenir des commandes, vous pouvez configurer vous-même des alias shell ou git.
sean
que faire si j'ai besoin d'exécuter la commande sur autant de machines différentes?
Dai Kaixian
1

Dans PhpStorm:

VCS → Git → Branches ... → Branches locales → _votre_branche_ → Renommer

AlexSi
la source
0

Tout ce que vous avez à faire, ce sont les trois étapes:

  1. Donnez à l'ancienne branche sous .git / refs / heads le nouveau nom
  2. Donnez à l'ancienne branche sous .git / logs / refs / heads le nouveau nom
  3. Mettez à jour le .git / HEAD pour mener à votre nouveau nom de branche

la source