Renommage des branches à distance dans Git
Si il y a un dépôt que je n'ai que git://
accès à (et généralement il suffit d'appuyer sur+pull), est-il un moyen de renommer les branches dans ce référentiel de la même manière que je le ferais localement avec git branch -m
?
- Le liés à "dupliquer" question demande pour renommer une branche "à la fois localement et à distance". Cette question, cependant, ne demande comment renommer les branches à distance, ce qui permet une simplification. C'est ce que je fais pour renommer une branche sur le serveur sans avoir besoin de caisse et / ou de créer une branche locale:
git push origin origin/old_name:refs/heads/new_name && git push origin :old_name
. - vous pouvez donner les deux commandes en une seule fois. Et cela devrait vraiment être la réponse à cette question.
- Vous avez raison, je n'ai qu'une optimisation déjà dans ce script de la mine.
- vous devriez poster votre commentaire comme une réponse, puisque je l'aime mieux que les autres ci-dessous.
- Fait.
- Double Possible de Comment faire pour renommer un local Git branch?
- J'ai essayé toutes les méthodes ci-dessous. Essentiellement, vous ne pouvez pas renommer la branche distante. Toutes les méthodes ci-dessous sont la suppression de la vieille branche à distance et de créer une nouvelle distance. Si vous le faites dans gitlab, la vieille branche/MR sera fermé et vous devez créer un nouveau M.
Vous devez vous connecter pour publier un commentaire.
Vous avez juste à créer une nouvelle branche locale avec le nom désiré, de le pousser à votre télécommande, puis supprimer l'ancienne branche distante:
Alors, de voir l'ancien nom de la branche, chaque client de l'référentiel aurait à faire:
REMARQUE: Si votre vieille branche est votre branche principale, vous devriez changer votre branche principale des paramètres. Sinon, lorsque vous exécutez
$ git push origin :old-branch-name
, vous obtiendrez l'erreur "la suppression de la branche courante interdite".mvbranch = "!moveit() { git branch -m $1 $2; git push origin :$1; git push --set-upstream origin $2; }; moveit"
git fetch origin --prune
(pour récupérer efficacement les nouvelles branches et aussi se débarrasser de l'références ne sont plus sur la télécommande).-d
ou--delete
au lieu de:
dans les plus récentes versions de git.Si vraiment vous voulez juste pour renommer les branches à distance, sans renommer les branches locales dans le même temps, vous pouvez le faire avec une seule commande:
J'ai écrit ce script (git-renommer-à distance-direction de la) qui fournit un raccourci pratique pour faire le dessus facilement.
À intégrer @ksrb commentaire: Que ce fait est de deux pousse dans une seule commande, la première
git push <remote> <remote>/<old_name>:refs/heads/<new_name>
pour pousser une nouvelle branche à distance basé sur l'ancien suivi à distance de la branche et puisgit push <remote> :<old_name>
pour supprimer l'ancienne branche distante.git push <remote>/<old_name>:refs/heads/<new_name>
moyens de pousser une nouvelle télécommande qui utilise l'ancienne à distance en tant que src puisgit push [space]:<old_name>
moyen de supprimer l'ancien distancerefs/heads/name
? Ne pouvez-vous pas simplement utilisername
directement, faisant de la première commandegit push <remote> <remote>/<old_name>:<new_name>
?<new_name>
n'existe pas encore. Si la branche n'existe pas, Git vous oblige à utiliser le nom complet sinon<new_name>
pourrait également faire référence à un nom de balise.refs/heads/<new_name>
existe déjà. La suppression réussit toujours, résultant en<remote>/<old_name>
seulement être supprimé. Quelques vérifications avant de la main peut facilement l'éviter.heads
(au pluriel) dans lerefs
.head
au lieu deheads
, et Git toujours dit "a créé une nouvelle branche" alors qu'en fait il n'y a pas de nouvelles branches d'être vu!git branch -a
soit.heads
espace de noms, au moins par défaut. Je n'étais pas en disant que c'est spécifique à Bitbucket, j'essayais juste d'expliquer pourquoi Bitbucket ne s'en soucient pas, et pourquoi il est ok pour le faire.git-extras
ou quelque chose? semble assez utile!git-extras
.D'abord passer à la branche que vous souhaitez renommer:
Pour supprimer une ancienne branche de
remote
:git push -u origin new_branch
) sinon le nouveau nom de la branche (new_branch) continuera d'assurer le suivi de l'origine/old_branch. Et une fois que vous supprimez la distance old_branch, le new_branch va encore faire le suivi de l'origine/old_branch, mais maintenant que la branche est allé.Sûr. Il suffit de renommer la branche localement, poussez la nouvelle branche, et de pousser à une suppression de l'ancien.
Le seul vrai problème est que les autres utilisateurs du référentiel de ne pas avoir de local de suivi des branches renommé.
TL;DR
"Renommer" une branche distante est en fait un 2 étapes de la procédure (pas nécessairement commandé):
git push [space]:<old_name>
comme ksrb expliqué);La suppression de
- Je utiliser TortoiseGit et quand j'ai essayé de supprimer la branche par le biais de la ligne de commande, j'ai obtenu ceci:
C'était probablement dû à concours de ne pas avoir la clé privée chargé (qui TortoiseGit charge automatiquement dans concours). Par ailleurs, j'ai remarqué que TortoiseGit commandes n'ont pas le
origin
ref en eux (par exemple,git.exe push --progress "my_project" interesting_local:interesting
).Je suis également en utilisant Bitbucket et, comme d'autres, basé sur le web en ligne git gestionnaires de la sorte (GitHub, GitLab), j'ai été en mesure de supprimer la branche à distance directement par le biais de leur interface (les branches de la page):
Cependant, dans TortoiseGit vous pouvez également supprimer des branches distantes à travers Parcourir les Références:
En cliquant-droit sur une branche distante (télécommandes liste), le Supprimer à distance option s'affiche:
Poussant
Après la suppression de l'ancienne branche distante j'ai poussé directement dans une nouvelle branche à distance par le biais de TortoiseGit juste en tapant le nouveau nom dans la à Distance: domaine de la Pousser la fenêtre et que cette branche a été automatiquement créé et visible dans Bitbucket.
Toutefois, si vous préférez le faire manuellement, un point qui n'a pas encore été mentionnés dans ce fil, c'est que
-u
=--set-upstream
.De
git push
docs,-u
est juste un alias de--set-upstream
, de sorte que les commandes dans les réponses de Sylvain (-définir-en amont de la nouvelle-branche
) et Shashank (-u origine new_branch
) sont équivalentes, puisque la distance ref par défautorigin
si aucun autre ref a été définie précédemment:git push origin -u new_branch
=git push -u new_branch
à partir de la docs description:
En fin de compte, je n'ai pas à taper manuellement ou utilisé les commandes suggérées par les autres réponses ici, alors peut-être que cela pourrait être utile à d'autres personnes dans une situation similaire.
origin
. Vous avez le nom de votre télécommande comme vous l'obtenez à partir de l'exécution de la commandegit remote
. Git fonctionne avecssh
ce qui implique que vous êtes en utilisant un public+privé clés. Je suppose que leAutoload Putty keys
de TortoiseGit est juste le chargement automatique les touches nécessaires pour vous rien d'autre à faire avec votre référence à distance. Dernière chose, c'est quegit push -u
n'est pas un alias pour en poussant une branche distante, c'est un alias pour la poussant une branche distante a été créé localement et sa référence à distance n'a pas encore cette branche.--set-upstream
et "si la configuration est manquant, il par défautorigin
". Sylvain et Shashank utiliser pour des en poussant un nouvellement créé distance. Le à problème peut être dû à concours ne pas l'avoir chargé quand j'ai essayégit push origin :in
sur la coque. Donc je ne comprends pas votre downvote, je viens de le souligner de la mine et de la non-réponse de détails dans d'autres réponses, les explique et les a résolus.-u
est un alias pour--set-upstream
mais ce n'est pas un alias pour en poussant une branche distante comme vous l'avez dit. Pousser à une branche distante vous avez uniquement besoin degit push <remote>
, et si ce n'est pas la distance mais, vous ajoutezgit push -u <remote>
. Par conséquent,-u
est utilisé pour créer une référence de la branche dans la distance.Je ne sais pas pourquoi, mais @Sylvain Defresne réponse ne fonctionne pas pour moi.
Je dois annuler l'amont et ensuite je peux définir le flux de données. Voici comment je l'ai fait.
Je ne sais pas si c'est bon ou mauvais, mais j'ai poussé le "nom" de la direction générale pour le "nouveau nom" de la direction générale, puis supprimé l'ancienne branche entièrement avec les deux lignes suivantes:
Vous pouvez créer une nouvelle branche basée sur l'ancien nom de la branche. Juste comme ça, puis supprimez l'ancienne succursale de, plus!!!
Ajouter aux réponses déjà données ici est une version qui vérifie d'abord si la nouvelle branche existe déjà (de sorte que vous pouvez l'utiliser en toute sécurité dans un script)
(le chèque est d' cette réponse)
git show-ref --quiet --verify -- refs/heads/$new_name
au lieu dels-remote | cut | sed | grep
.