git: renommer les branches à distance?

S'il y a un dépôt que je n'ai accès qu'à Git:// (et que je n'aurais généralement qu'à push+pull), y a-t-il un moyen de renommer les branches dans ce dépôt de la même manière que je le ferais localement avec git branch -m ?

328
demandé sur kdt 2011-01-21 02:30:51

9 réponses

Vous n'avez qu'à créer une nouvelle branche locale avec le nom désiré, de le pousser à votre télécommande, puis 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

alors, pour voir l'ancien nom de branche, chaque client du dépôt devrait faire:

$ git fetch origin
$ git remote prune origin

NOTE: Si votre ancienne branche est votre branche principale, vous devez modifier les paramètres de votre branche principale. Sinon, lorsque vous lancez $ git push origin :old-branch-name , vous obtiendrez l'erreur " suppression de l'actuel branche interdite " .

421
répondu Sylvain Defresne 2017-05-23 12:34:53

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

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

j'ai écrit ce script ( git-renommer-à distance-direction de la ), qui fournit un raccourci pratique pour faire le dessus facilement.

pour intégrer le commentaire de @ksrb : ce que cela fait essentiellement est deux pousses dans un seul commande, d'abord git push <remote> <remote>/<old_name>:refs/heads/<new_name> pour pousser une nouvelle branche distante basée sur l'ancienne branche de suivi à distance et ensuite git push <remote> :<old_name> pour supprimer l'ancienne branche distante.

240
répondu sschuberth 2017-11-10 15:25:09

premier paiement à la succursale que vous voulez renommer

git branch -m old_branch new_branch
git push -u origin new_branch

pour enlever la vieille branche de la télécommande:

git push origin :old_branch
145
répondu Shashank Hegde 2016-09-15 18:50:34

bien sûr. Il suffit de renommer la branche localement, puis de pousser la nouvelle branche et de pousser une suppression de l'ancienne. Le seul vrai problème est que les autres utilisateurs de la repo n'auront pas de branches locales de suivi renommées.

10
répondu Kevin Ballard 2011-01-20 23:33:48

TL; DR

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

  • suppression de l'ancienne branche distante ( git push [space]:<old_name> comme ksrb expliqué );
  • poussez-le dans une nouvelle branche à distance (différence entre un couple de réponses commandes ci-dessous).

Supprimer

j'utilise TortoiseGit et quand j'ai essayé pour la première fois de supprimer la branche à travers la ligne de commande, j'ai eu ceci:

$ git push origin :in
  • fatal: "origine" ne semble pas être un dépôt git

  • fatal: impossible de lire depuis un dépôt à distance.

S'il vous plaît assurez-vous que vous avez les droits d'accès corrects et que le dépôt existe.

cela était probablement dû à pageant n'ayant pas la clé privée chargé (qui TortoiseGit charge automatiquement dans pageant ). De plus, j'ai remarqué que les commandes TortoiseGit n'ont pas la référence origin (par exemple git.exe push --progress "my_project" interesting_local:interesting ).

j'utilise aussi Bitbucket et, comme d'autres gestionnaires de git en ligne sur le web du genre (Github, GitLab), j'ai pu supprimer la branche distante directement via leur interface (page branches):

Delete branch Bitbucket

Cependant, dans TortoiseGit , vous pouvez aussi supprimer les branches distantes à travers Parcourir Références :

Browse References menu

par clic droit sur une branche distante (liste des télécommandes) l'option supprimer la branche distante apparaît:

TortoiseGit remote branch delete

Pousser

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

cependant, si vous préférez encore le faire manuellement, un point qui n'a pas encore été mentionné dans ce thread est que -u = --set-upstream .

à Partir de git push docs , -u est juste un alias de --set-upstream , de sorte que les commandes dans le les réponses de Sylvain ( -set-upstream new-branch ) et Shashank ( -u origin new_branch ) sont équivalentes, puisque la réf. à distance par défaut à origin si aucune autre réf. n'a été définie auparavant:

  • git push origin -u new_branch = git push -u new_branch de la description docs :

    si la configuration est manquante, elle est par défaut origin .

à la fin, je n'ai pas tapé ou utilisé manuellement l'une des commandes suggérées par les autres réponses ici, donc peut-être que cela pourrait être utile à d'autres dans une situation similaire.

2
répondu CPHPython 2018-03-23 17:06:00

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ébrancher l'amont et puis je peux remettre le flux. 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
répondu arthur bryant 2018-04-13 01:47:06

Je ne sais pas si c'est bien ou mal, mais j'ai poussé le "vieux nom" de la branche au "nouveau nom" de la branche, puis j'ai supprimé l'ancienne branche entièrement avec les deux lignes suivantes:

git push origin old_branch:new_branch
git push origin :old_branch
0
répondu EpicPandaForce 2017-05-03 11:43:14

vous pouvez créer une nouvelle branche basée sur une ancienne branche de nom. Tout comme ceci, puis supprimer la vieille branche, terminé!!! enter image description here

-2
répondu Pober Wong 2018-04-10 11:32:19

en ajoutant aux réponses déjà données, Voici une version qui vérifie d'abord si la nouvelle branche existe déjà (pour que vous puissiez l'utiliser en toute sécurité dans un script)

if git ls-remote --heads "$remote" \
    | cut -f2 \
    | sed 's:refs/heads/::' \
    | grep -q ^"$newname"$; then
    echo "Error: $newname already exists"
    exit 1
fi
git push "$oldname" "$remote/$oldname:refs/heads/$newname" ":$oldname"

(le contrôle est de cette réponse )

-3
répondu myzzzl 2017-06-09 17:38:35