Wenn es ein Repository gibt, über das ich nur git://
Zugriff habe (und normalerweise nur push+pull machen würde), gibt es eine Möglichkeit, Zweige in diesem Repository auf die gleiche Weise umzubenennen, wie ich es lokal mit git branch -m
?
Antworten
Zu viele Anzeigen?Sie müssen lediglich eine neue lokale Verzweigung mit dem gewünschten Namen erstellen, sie auf die entfernte Seite übertragen und dann die alte entfernte Verzweigung löschen:
$ git branch new-branch-name origin/old-branch-name
$ git push origin --set-upstream new-branch-name
$ git push origin :old-branch-name
Um den alten Zweignamen zu sehen, müsste dann jeder Client des Repositorys dies tun:
$ git fetch origin
$ git remote prune origin
HINWEIS: Wenn Ihr alter Zweig Ihr Hauptzweig ist, sollten Sie die Einstellungen des Hauptzweigs ändern. Andernfalls werden Sie beim Ausführen von $ git push origin :old-branch-name
erhalten Sie die Fehlermeldung "Löschung des aktuellen Zweigs verboten" .
Wenn Sie wirklich nur Zweige aus der Ferne umbenennen wollen, ohne gleichzeitige Umbenennung lokaler Zweigstellen können Sie dies mit einem einzigen Befehl tun:
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>
Ich habe dieses Skript geschrieben ( git-rename-remote-branch ), die eine praktische Abkürzung bietet, um die oben genannten Schritte einfach durchzuführen.
Als eine Bash-Funktion:
git-rename-remote-branch(){
if [ $# -ne 3 ]; then
echo "Rationale : Rename a branch on the server without checking it out."
echo "Usage : ${FUNCNAME[0]} <remote> <old name> <new name>"
echo "Example : ${FUNCNAME[0]} origin master release"
return 1
fi
git push $1 $1/$2\:refs/heads/$3 :$2
}
Um den Kommentar von @ksrb zu integrieren : Im Grunde werden damit zwei Vorgänge in einem einzigen Befehl durchgeführt, nämlich erstens git push <remote> <remote>/<old_name>:refs/heads/<new_name>
einen neuen entfernten Zweig auf der Grundlage des alten entfernten Verfolgungszweigs zu verschieben und dann git push <remote> :<old_name>
um den alten entfernten Zweig zu löschen.
TL;DR
Das "Umbenennen" eines entfernten Zweigs ist eigentlich ein 2-stufiger Prozess (nicht unbedingt in Reihenfolge):
- Löschung des alten entfernten Zweigs (
git push [space]:<old_name>
como ksrb erklärt ); - in einen neuen entfernten Zweig pushen (Unterschied zwischen einigen Antwortbefehlen unten).
Löschen von
Ich benutze TortoiseGit und als ich zum ersten Mal versuchte, die Verzweigung über die Befehlszeile zu löschen, erhielt ich folgende Meldung:
$ git push origin :in
fatal: 'origin' scheint kein Git-Repository zu sein
fatal: Konnte nicht vom entfernten Repository lesen.
Vergewissern Sie sich, dass Sie die richtigen Zugriffsrechte haben und das Repository existiert.
Dies war wahrscheinlich zurückzuführen auf Festzug nicht über die privater Schlüssel geladen (die TortoiseGit lädt automatisch in Festzug ). Außerdem habe ich festgestellt, dass TortoiseGit Befehle haben nicht die origin
ref in ihnen (z. B. git.exe push --progress "my_project" interesting_local:interesting
).
Ich verwende auch Bitbucket und, wie andere webbasierte Online-Git-Manager der Art (GitHub, GitLab), war ich in der Lage, die Remote-Zweig direkt über ihre Schnittstelle (Zweige Seite) zu löschen:
Doch in TortoiseGit können Sie auch entfernte Zweige löschen durch Referenzen durchsuchen :
Wenn Sie mit der rechten Maustaste auf einen entfernten Zweig (Liste der entfernten Zweige) klicken, wird Entfernten Zweig löschen wird angezeigt:
Schieben Sie
Nachdem ich den alten Remote-Zweig gelöscht hatte, habe ich direkt in einen neuen Remote-Zweig durch TortoiseGit indem Sie einfach den neuen Namen in das Feld Ferngesteuert: Feld des Schieben Sie Fenster und dieser Zweig wurde automatisch erstellt und ist in Bitbucket .
Wenn Sie es trotzdem lieber manuell machen wollen, ist ein Punkt, der in diesem Thread noch nicht erwähnt wurde, dass -u
= --set-upstream
.
De git push
docs , -u
ist nur ein Alias von --set-upstream
, so dass die Befehle in den Antworten von Sylvain ( -set-upstream new-branch
) y Shashank ( -u origin new_branch
) sind gleichwertig, da die Fernreferenz wird standardmäßig auf origin
wenn zuvor keine andere Referenz definiert wurde:
-
git push origin -u new_branch
=git push -u new_branch
von der docs Beschreibung :Fehlt die Konfiguration, ist sie standardmäßig auf
origin
.
Letztendlich habe ich keinen der Befehle, die in den anderen Antworten vorgeschlagen wurden, manuell eingegeben oder verwendet, so dass dies vielleicht für andere in einer ähnlichen Situation nützlich sein könnte.
- See previous answers
- Weitere Antworten anzeigen