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
?
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" .
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.
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
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.
"Renommer" une branche distante est en fait un processus en 2 étapes (pas nécessairement ordonné):
git Push [space]:<old_name>
as ksrb expliqué );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):
Cependant, dans TortoiseGit , vous pouvez également supprimer des branches distantes via . Parcourir les références :
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:
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.
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
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