Wie benenne ich sowohl einen lokalen Git- als auch einen Remote-Zweigstellennamen um?


454

Ich habe vier Zweige wie master -> origin / regacy, FeatureA -> origin / FeatureA. Wie Sie sehen, habe ich den falschen Namen eingegeben.

Ich möchte also einen Remote-Zweigstellennamen umbenennen (Ursprung / Regacy → Ursprung / Vermächtnis oder Ursprung / Master).

Ich versuche den folgenden Befehl:

git remote rename regacy legacy

Aber die Git-Konsole hat mir eine Fehlermeldung zurückgegeben.

 error : Could not rename config section 'remote.regacy' to 'remote.legacy'

Wie kann ich dieses Problem lösen?




Antworten:


806

Geben Sie hier die Bildbeschreibung ein


Es gibt einige Möglichkeiten, dies zu erreichen:

  1. Ändern Sie Ihre lokale Niederlassung und übertragen Sie Ihre Änderungen
  2. Schieben Sie den Zweig mit dem neuen Namen auf Remote, während Sie den ursprünglichen Namen lokal beibehalten

Lokal und Remote umbenennen

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

# Delete the old branch on remote - where <remote> is, for example, origin
git push <remote> --delete <old_name>

# Or shorter way to delete remote branch [:]
git push <remote> :<old_name>

# Push the new branch to remote
git push <remote> <new_name>

# Reset the upstream branch for the new_name local branch
git push <remote> -u <new_name>

Geben Sie hier die Bildbeschreibung ein


Nur Remote-Zweig umbenennen

Bildnachweis : ptim

# In this option, we will push the branch to the remote with the new name
# While keeping the local name as is
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Wichtige Notiz:

Wenn Sie git branch -m(move) verwenden, aktualisiert Git auch Ihren Tracking-Zweig mit dem neuen Namen.

git remote rename legacy legacy

git remote renameversucht, Ihren Remote-Abschnitt in Ihrer Konfigurationsdatei zu aktualisieren. Die Fernbedienung mit dem angegebenen Namen wird in den neuen Namen umbenannt. In Ihrem Fall wurde jedoch keine gefunden, sodass die Umbenennung fehlgeschlagen ist.

Aber es wird nicht tun, was Sie denken; Der Remote-Name Ihrer lokalen Konfiguration und nicht der Remote-Zweig wird umbenannt. 


Hinweis Mit Git-Servern können Sie Git-Zweige möglicherweise über die Weboberfläche oder externe Programme (wie Sourcetree usw.) umbenennen. Beachten Sie jedoch, dass in Git die gesamte Arbeit lokal ausgeführt wird. Daher wird empfohlen, die oben genannten Befehle zu verwenden zu der Arbeit.


Sie müssen noch etwas tun, nach dem oben genannten und wenn ich versuche zu ziehen, bekomme ich Nachricht:Your configuration specifies to merge with the ref ''refs/heads/old_name'
Krzysztof Krasoń

6
Vergessen Sie nicht, den alten Upstream zu deaktivieren:git checkout <new_name> ; git branch --unset-upstream
Miguel Ping

2
@ MiguelPings Kommentar ist wichtig. Beim Versuch, einen Zweig umzubenennen, habe ich bereits auf github verschoben, das Löschen, Umbenennen von local und das erneute Verschieben führen dazu, dass der alte Name erneut verwendet wird. Wenn ich --unset-upstreamvor dem erneuten Drücken, funktioniert es wie vorgesehen.
Adam Tuttle

1
Gibt es eine Möglichkeit, das automatische Schließen der offenen PRs im Zweig mit dem alten Namen auf der Fernbedienung zu vermeiden? Konfrontiert mit gitlab, wo die PR für den alten Filialnamen geschlossen wurde, nachdem auf den Ursprung gedrängt wurde.
Himanshu Tanwar

141

Wenn Sie einen Zweig falsch benannt UND in das Remote-Repository verschoben haben, führen Sie die folgenden Schritte aus, um diesen Zweig umzubenennen ( basierend auf diesem Artikel ):

  1. Benennen Sie Ihre lokale Niederlassung um:

    • Wenn Sie sich in der Filiale befinden, die Sie umbenennen möchten:
      git branch -m new-name

    • Wenn Sie sich in einem anderen Zweig befinden:
      git branch -m old-name new-name

  2. Löschen Sie den old-nameRemote-Zweig und drücken Sie den new-namelokalen Zweig :
    git push origin :old-name new-name

  3. Setzen Sie den Upstream-Zweig für den lokalen Zweig mit dem neuen Namen zurück :
    Wechseln Sie zum Zweig und dann:
    git push origin -u new-name


1
Wenn nach den ersten beiden Schritten eine Fehlermeldung über den aktuellen Zweig angezeigt wird, der auf einen nicht vorhandenen Zweig auf dem Remote-Repo verweist, wird dies im dritten Schritt behoben
Kevin Hooke,

1
@ Dr1Ku Sie müssen den Unterschied zwischen git push <remote> --delete old_name& kennen git push origin :old-name new-name, um einen Zweig zu löschen.
Ashutosh Chamoli

BitBucket-Benutzer: Beheben Sie den Fehler in Schritt 2 beim Umbenennen master. Setzen Sie in Repo Details den Standardzweig auf neuen Zweig. Der Fehler ist:By default, deleting the current branch is denied, because the next 'git clone' won't result in any file checked out, causing confusion. You can set 'receive.denyDeleteCurrent' configuration variable to 'warn' or 'ignore' in the remote repository to allow deleting the current branch, with or without a warning message. To squelch this message, you can set it to 'refuse'. error: refusing to delete the current branch: refs/heads/master
Colin

37

Es scheint einen direkten Weg zu geben:

Wenn Sie Zweige wirklich nur remote umbenennen möchten (ohne gleichzeitig lokale Zweige umzubenennen), können Sie dies mit einem einzigen Befehl wie tun

git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Umbenennen von Zweigen aus der Ferne in Git

Weitere Informationen finden Sie in der Originalantwort.


1
Hat in git nicht funktioniert 2.20.1Der alte Zweig wurde gelöscht, aber der neue wurde nicht erstellt.
Paul Razvan Berg

26

Dies kann auch folgendermaßen erfolgen.

Benennen Sie zuerst den lokalen Zweig um, dann den Remote-Zweig.

Umbenennen der lokalen Niederlassung:

Wenn Sie in einem anderen Zweig angemeldet sind,

git branch -m old_branch new_branch 

Wenn Sie in derselben Filiale angemeldet sind,

git branch -m new_branch

Remote-Zweig umbenennen:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch

5

Wenn Sie bereits den falschen Namen an remote gesendet haben, gehen Sie wie folgt vor:

  1. Wechseln Sie zu dem lokalen Zweig, den Sie umbenennen möchten

    git checkout <old_name>

  2. Benennen Sie den lokalen Zweig um

    git branch -m <new_name>

  3. Schieben Sie den <new_name>lokalen Zweig und setzen Sie den vorgelagerten Zweig zurück

    git push origin -u <new_name>

  4. Löschen Sie den <old_name>Remote-Zweig

    git push origin --delete <old_name>

Dies basierte auf diesem Artikel .


4

Anhängen eines einfachen Snippets zum Umbenennen Ihres aktuellen Zweigs (lokal und nach Ursprung):

git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>

Erklärung aus Git-Dokumenten:

Die Option git branch -m oder -M wird in umbenannt. Wenn ein entsprechendes Reflog vorhanden ist, wird es entsprechend umbenannt und ein Reflog-Eintrag erstellt, um die Umbenennung des Zweigs zu speichern. Wenn vorhanden, muss -M verwendet werden, um die Umbenennung zu erzwingen.

Die spezielle Referenz: (oder +: um Aktualisierungen ohne schnellen Vorlauf zu ermöglichen) weist Git an, "passende" Zweige zu pushen: Für jeden Zweig, der auf der lokalen Seite vorhanden ist, wird die entfernte Seite aktualisiert, wenn bereits ein Zweig mit demselben Namen vorhanden ist auf der entfernten Seite.

--set-upstream Richten Sie die Tracking-Informationen des Setups so ein, dass sie als Upstream-Zweig betrachtet werden. Wenn no angegeben ist, wird standardmäßig der aktuelle Zweig verwendet.


3

Es gibt keine direkte Methode,

  1. Lokale Niederlassung umbenennen ,

    Mein aktueller Zweig ist Master

    git branch -m master_renamed #master_renamed ist der neue Name des Masters

  2. Remote-Zweig löschen,

    git push origin --delete master #origin ist remote_name

  3. Schieben Sie den umbenannten Zweig in die Fernbedienung.

    git push origin master_renamed

Das ist es...


Schön und einfach und nur 3 Schritte. Die einzige Verbesserung, die ich vorschlagen kann, besteht git push -u origin master_renameddarin, den Zweig als Tracking-Zweig
festzulegen

2

Dies kann auch ohne Umbenennen des lokalen Zweigs in drei einfachen Schritten erfolgen:

  1. Gehen Sie zu Ihrem Repository in GitHub
  2. Erstellen Sie einen neuen Zweig aus dem alten Zweig, den Sie umbenennen möchten
  3. Löschen Sie den alten Zweig

0

Ich benutze diesen Git-Alias ​​und er erledigt den Job so ziemlich automatisch:

git config --global alias.move '!git checkout master; git branch -m $1 $2; git status; git push --delete origin $1; git status; git push -u origin $2; git branch -a; exit;'

Verwendung: git move FROM_BRANCH TO_BRANCH

Es funktioniert, wenn Sie die Standardnamen wie Master, Herkunft usw. haben. Sie können nach Belieben ändern, aber es gibt Ihnen die Idee.


0

Ich musste die folgende Aufgabe ausführen, um den lokalen und den Remote-Zweig umzubenennen:

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

#  Delete the old remote branch
git push origin --delete <old_name>

# push to new remote branch - creates new remote branch
git push origin <new_name>

# set new remote branch as default remote branch for local branch
git branch --set-upstream-to=origin/<new_name> <new_name>

Wie unterscheidet es sich von der bestehenden Antwort?
Himanshu Tanwar

0
  1. Benennen Sie Ihre lokale Niederlassung um. Wenn Sie sich in der Filiale befinden, die Sie umbenennen möchten:

    Git Branch -m neuer Name

Wenn Sie sich in einem anderen Zweig befinden:

git branch -m old-name new-name
  1. Löschen Sie den Remote-Zweig mit dem alten Namen und drücken Sie den lokalen Zweig mit dem neuen Namen.

    Git Push Ursprung: alter Name neuer Name

  2. Setzen Sie den Upstream-Zweig für den lokalen Zweig mit dem neuen Namen zurück. Wechseln Sie in die Filiale und dann:

    Git Push Origin -u neuer Name

Alles bereit!


0
  • Benennen Sie Ihre lokale Niederlassung um .

Wenn Sie sich in der Filiale befinden, die Sie umbenennen möchten:

git branch -m new-name

Wenn Sie derzeit in einer anderen Filiale bleiben:

git branch -m old-name new-name
  • Löschen Sie den Remote-Zweig mit dem alten Namen und drücken Sie den lokalen Zweig mit dem neuen Namen.

Bleiben Sie auf dem Zielzweig und:

git push origin :old-name new-name
  • Setzen Sie den Upstream-Zweig für den lokalen Zweig mit dem neuen Namen zurück.

Wechseln Sie zum Zielzweig und dann:

git push origin -u new-name
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.