git: renommer les branches à distance?
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 " .
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.
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
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.
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):
Cependant, dans TortoiseGit , vous pouvez aussi supprimer les branches distantes à travers Parcourir Références :
par clic droit sur une branche distante (liste des télécommandes) l'option supprimer la branche distante apparaît:
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.
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
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
vous pouvez créer une nouvelle branche basée sur une ancienne branche de nom. Tout comme ceci, puis supprimer la vieille branche, terminé!!!
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 )