447 Stimmen

Umbenennen von Zweigen aus der Ferne in Git

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 ?

1voto

CPHPython Punkte 9094

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:

Delete branch Bitbucket

Doch in TortoiseGit können Sie auch entfernte Zweige löschen durch Referenzen durchsuchen :

Browse References menu

Wenn Sie mit der rechten Maustaste auf einen entfernten Zweig (Liste der entfernten Zweige) klicken, wird Entfernten Zweig löschen wird angezeigt:

TortoiseGit remote branch delete

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.

1voto

arthur bryant Punkte 335

Ich weiß nicht, warum, aber die Antwort von @Sylvain Defresne funktioniert bei mir nicht.

git branch new-branch-name origin/old-branch-name
git push origin --set-upstream new-branch-name
git push origin :old-branch-name

Ich muss den Upstream deaktivieren und kann dann den Stream wieder einstellen. Das Folgende ist, wie ich es tat.

git checkout -b new-branch-name
git branch --unset-upstream
git push origin new-branch-name -u
git branch origin :old-branch-name

-1voto

Pober Wong Punkte 118

Wenn Sie Github verwenden ...

Sie können einen neuen Zweig auf der Grundlage des Zweigs mit dem alten Namen erstellen, indem Sie die Benutzeroberfläche auf github.com verwenden:

Branch Rename

-4voto

myzzzl Punkte 13

Ergänzend zu den bereits gegebenen Antworten ist hier eine Version, die zuerst prüft, ob der neue Zweig bereits existiert (so dass Sie ihn sicher in einem Skript verwenden können)

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"

(der Scheck ist von diese Antwort )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X