web-dev-qa-db-fra.com

Renommer des branches à distance dans Git

S'il y a un référentiel auquel je n'ai accès que git:// (et que je ne fais que pousser + tirer), existe-t-il un moyen de renommer les branches de ce référentiel de la même manière que je le ferais localement avec git branch -m?

376
kdt

Il vous suffit de créer une nouvelle branche locale portant le nom souhaité, de la transmettre à votre télécommande, puis de supprimer l'ancienne branche distante:

$ git branch new-branch-name Origin/old-branch-name
$ git Push Origin --set-upstream new-branch-name
$ git Push Origin :old-branch-name

Ensuite, pour voir l'ancien nom de la branche, chaque client du référentiel devra faire:

$ git fetch Origin
$ git remote Prune Origin

REMARQUE: Si votre ancienne branche est votre branche principale, vous devez modifier les paramètres de votre branche principale. Sinon, lorsque vous exécuterez $ git Push Origin :old-branch-name, vous obtiendrez le message d'erreur "suppression de la branche actuelle interdite" .

458
Sylvain Defresne

Si vous voulez juste renommer les branches à distance, sans renommer les branches locales en même temps , vous pouvez le faire en une seule commande:

git Push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

J'ai écrit ce script ( git-rename-remote-branch ) qui fournit un raccourci pratique pour effectuer facilement ce qui précède.

Pour intégrer le commentaire de @ ksrb : Cela consiste en deux poussées dans une seule commande, d'abord git Push <remote> <remote>/<old_name>:refs/heads/<new_name> to Pousser une nouvelle branche distante basée sur l'ancienne branche de suivi distante et puis git Push <remote> :<old_name> pour supprimer l'ancienne branche distante.

273
sschuberth

Commencez par passer à la branche que vous souhaitez renommer:

git branch -m old_branch new_branch
git Push -u Origin new_branch

Pour supprimer une ancienne branche de remote:

git Push Origin :old_branch
163
Shashank Hegde

Sûr. Il suffit de renommer la branche localement, de pousser la nouvelle branche et de pousser une suppression de l’ancienne.

Le seul problème réel est que les autres utilisateurs du référentiel n'auront pas de branches de suivi locales renommées.

10
Lily Ballard

TL; DR

"Renommer" une branche distante est en fait un processus en 2 étapes (pas nécessairement ordonné):

  • suppression de l'ancienne branche distante (git Push [space]:<old_name> as ksrb expliqué );
  • Diffusez dans une nouvelle branche distante (différence entre quelques commandes de réponses ci-dessous).

Suppression

J'utilise TortoiseGit et quand j'ai d'abord essayé de supprimer la branche via la ligne de commande, j'ai eu ceci:

$ git Push Origin :in
  • fatal: 'Origin' ne semble pas être un référentiel git

  • fatal: Impossible de lire à partir du référentiel distant.

Assurez-vous que vous disposez des droits d'accès appropriés et que le référentiel existe.

Cela était probablement dû au fait que pageant n’avait pas la clé privée chargée (which TortoiseGit se charge automatiquement dans pageant ). De plus, j'ai remarqué que les commandes TortoiseGit n'ont pas la référence Origin ref (par exemple, git.exe Push --progress "my_project" interesting_local:interesting).

J'utilise également Bitbucket et, comme d'autres gestionnaires de git en ligne basés sur le Web (GitHub, GitLab), j'ai pu supprimer la branche distante directement via leur interface (branches page):

Delete branch Bitbucket

Cependant, dans TortoiseGit , vous pouvez également supprimer des branches distantes via . Parcourir les références :

Browse References menu

En cliquant avec le bouton droit de la souris sur une branche distante (liste des télécommandes), l’option Supprimer la branche distante s’affiche:

TortoiseGit remote branch delete

Poussant

Après avoir supprimé l'ancienne branche distante, j'ai poussé directement dans une nouvelle branche distante via TortoiseGit en tapant simplement le nouveau nom dans le champ Remote: champ de la fenêtre Push et cette branche a été créée automatiquement et visible dans Bitbucket .

Cependant, si vous préférez toujours le faire manuellement, un point qui n’a pas encore été mentionné dans ce fil de discussion est que -u = --set-upstream.

De git Push docs , -u n'est qu'un alias de --set-upstream, donc les commandes dans les réponses de Sylvain (-set-upstream new-branch) et Shashank (-u Origin new_branch) sont équivalents, car la référence distante est définie par défaut sur Origin si aucune autre référence n’était précédemment définie:

  • git Push Origin -u new_branch = git Push -u new_branch à partir de description de la documentation :

    Si la configuration est manquante, la valeur par défaut est Origin.

En fin de compte, je n'ai pas tapé manuellement ni utilisé les commandes suggérées par les autres réponses ici, alors peut-être que cela pourrait être utile à d'autres dans une situation similaire.

2
CPHPython

Je ne sais pas pourquoi mais la réponse de @Sylvain Defresne ne fonctionne pas pour moi.

git branch new-branch-name Origin/old-branch-name
git Push Origin --set-upstream new-branch-name
git Push Origin :old-branch-name

Je dois désamorcer l'amont et je peux ensuite régler le flux à nouveau. Voici comment je l'ai fait.

git checkout -b new-branch-name
git branch --unset-upstream
git Push Origin new-branch-name -u
git branch Origin :old-branch-name
1
arthur bryant

Je ne sais pas si cela est correct ou non, mais j'ai poussé "l'ancien nom" de la branche sur le "nouveau nom" de la branche, puis j'ai supprimé entièrement l'ancienne branche avec les deux lignes suivantes:

git Push Origin old_branch:new_branch
git Push Origin :old_branch
0
EpicPandaForce