Umbenennen eines Zweigs in GitHub

297

Ich habe gerade meine lokale Niederlassung mit umbenannt

git branch -m oldname newname

Dadurch wird jedoch nur die lokale Version des Zweigs umbenannt. Wie kann ich die auf GitHub umbenennen?

Enchance
quelle
5
Mögliches Duplikat von Git: Remote Branch umbenennen
Andrew Marshall
Haben Sie die Admin-Einstellungen überprüft? Mein aktuelles Projekt auf Github hat keine Zweige, aber Sie können das Repo dort umbenennen, sodass ich denke, Sie könnten auch Zweige umbenennen.
evanmcdonnal
12
@evanmcdonnal Nein, Sie können einen Git-Zweig von der GitHub-Site nicht umbenennen.
Andrew Marshall
Die Antworten auf diese Frage sind fast überall falsch. Die Frage ist nicht, wie man einen Git-Zweig umbenennt, sondern wie man einen Github- Zweig umbenennt . Viele Dinge auf Github sind an einen Zweig gebunden, was bedeutet, dass jede Antwort diese Dinge abdecken muss. Zum Beispiel das Umbenennen von Master zu Haupt
gman
@gman Für das, was es wert ist, scheinen diese Antworten den Geist der Frage des OP zu beantworten. Die Frage des OP wurde möglicherweise aus technisch anspruchsvoller Sicht oder aufgrund des relevanten Themas, mit dem Sie sich derzeit befassen, nicht perfekt formuliert. Aber dann kommt diese Frage nicht aus einem tiefen technischen Hintergrund von Git oder GitHub. Aus dieser Perspektive kann man dies als "Anfänger" - oder elementare Frage betrachten. Als solches ist es formuliert und für dieses Publikum angemessen beantwortet. Frustrierend, klar, aber ich denke, diese Frage, diese Antworten sind angemessen / relevant, insbesondere für Fragen zur Verwendung von Git / Hub vor BLM.
SherylHohman

Antworten:

309

Wie bereits erwähnt, löschen Sie den alten auf Github und drücken Sie ihn erneut, obwohl die verwendeten Befehle etwas ausführlicher als nötig sind:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

Einfach. Wenn Sie die Befehle ein wenig zerlegen, lautet der Befehl git push im Wesentlichen:

git push <remote> <local_branch>:<remote_branch>

Ein Push ohne Angabe von local_branch bedeutet also im Wesentlichen, "nichts aus meinem lokalen Repository zu nehmen und es zum Remote-Zweig zu machen". Ich habe immer gedacht, dass dies völlig klobig ist, aber so wird es gemacht.

Bearbeiten: Ab Git 1.7 gibt es eine alternative Syntax zum Löschen eines Remote-Zweigs:

git push origin --delete name_of_the_remote_branch

Bearbeiten: Wie von @ void.pointer in den Kommentaren erwähnt

Beachten Sie, dass Sie die beiden Push-Vorgänge kombinieren können:

git push origin :old_branch new_branch

Dadurch wird sowohl der alte Zweig gelöscht als auch der neue verschoben.

Dies kann in einen einfachen Alias ​​umgewandelt werden, der den Namen des entfernten, ursprünglichen Zweigs und des neuen Zweigs als Argumente verwendet ~/.gitconfig:

[alias]
    branchm = "!git branch -m $2 $3 && git push $1 :$2 $3 -u #"

Verwendungszweck:

git branchm origin old_branch new_branch

Beachten Sie, dass Positionsargumente in Shell-Befehlen in älteren (vor 2.8?) Versionen von git problematisch waren, sodass der Alias ​​je nach git-Version variieren kann. Weitere Informationen finden Sie in dieser Diskussion .

Adam Parkin
quelle
32
Beachten Sie, dass Sie die beiden Push-Vorgänge kombinieren können : git push origin :old_branch new_branch. Dadurch wird sowohl der alte Zweig gelöscht als auch der neue verschoben.
void.pointer
4
Gibt es einen Grund, warum der neue Zweig nicht verschoben werden kann, bevor der alte gelöscht wird? Ich persönlich bevorzuge Prozesse, bei denen der Löschvorgang nach dem erfolgreichen Erstellungsvorgang erfolgt, nur für den Fall, dass etwas schief geht.
jmort253
7
Funktioniert nicht. Es wird einfach den Zweig mit seinem alten Namen wieder auf Github setzen.
Geoff
1
@AdamParkin 1. git branch -m new_branch(benenne old_branch in new_branch um) 2. git commit -m 'msg', 3. git push4. Mhmm, old_branch taucht in Github auf, Google-Frage und ich werde zu deiner Antwort geführt 5. git push origin :old_branch(sagt es gelöscht) 6. git push origin new_branch... vervollständigt dann sagt * [new branch] new_branch -> old_branch. Geh zurück zu Github und tauche old_branchwieder auf. Wenn ich in der Github-Web-Benutzeroberfläche lösche, habe ich die Option "Wiederherstellen". Es scheint also, als würde das Drücken der new_branch nur wiederhergestellt.
Kcvin
2
Beachten Sie, dass beim Umbenennen des Zweigs alle Pull-Anforderungen, die Sie für diese Pull-Anforderung geöffnet haben, automatisch geschlossen werden. Wir mussten den Zweig wieder umbenennen und dann alle Pull-Anfragen manuell wieder öffnen ....
jmort253
24

Folgende Befehle haben bei mir funktioniert:

git push origin :old-name-of-branch-on-github
git branch -m old-name-of-branch-on-github new-name-for-branch-you-want
git push origin new-name-for-branch-you-want
Taimoor Changaiz
quelle
Dies ist die kurze Antwort, die funktioniert. Übrigens könnte der erste Befehl auch als letzter in die Antwort eingefügt werden.
Eric Wang
Diese Antwort bezieht sich auf git not github
gman
1
Eigentlich habe ich das nur zweimal gemacht und es hat auf Github funktioniert.
Spozun
17

Ich habe 3 Befehle gefunden, wie Sie Ihren Git-Zweignamen ändern können, und diese Befehle sind eine schnellere Möglichkeit, dies zu tun

git branch -m old_branch new_branch         # Rename branch locally    
git push origin :old_branch                 # Delete the old branch    
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

Wenn Sie Schritt für Schritt benötigen, können Sie diesen großartigen Artikel lesen

So benennen Sie Git Local und Remote Branches um

Hazarapet Tunanyan
quelle
1
git push --set-upstreamDies ist der wichtigste Teil, wenn Sie den Filialnamen lokal mit der Github-App ändern, bevor Sie die Remote-Filiale löschen.
Louis Yang
Diese Antwort bezieht sich auf git not github
gman
12

Entfernen Sie einfach den alten Zweig und erstellen Sie einen neuen.

Beispiel (ausschließlich Umbenennen des Remote-Zweigs):

git push origin :refs/heads/oldname
git push origin newname:refs/heads/newname

Sie sollten wahrscheinlich auch den lokalen Zweig umbenennen und die Einstellungen für das Drücken / Ziehen ändern.

Vi.
quelle
1
Sollte der 2. Befehl nicht sein git push origin newname:refs/heads/newname? master und newname verweisen möglicherweise nicht auf dasselbe Commit.
Steve Folly
"master" ist nur als beispiel, wird sich jetzt ändern.
Vi.
Möglicherweise sollte die Reihenfolge von zwei Befehlen umgekehrt werden (dh zuerst einen neuen Namen hochladen, danach den alten entfernen)
Vi.
Diese Antwort bezieht sich auf git not github
gman
@gman, benennt es nicht Git-weise um, sondern auch Github-weise?
Vi.
9

Benennen Sie Zweige in git local und remote um

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 Remote-Zweig mit dem alten Namen und drücken Sie den lokalen Zweig mit dem neuen Namen.

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 in die Filiale und dann:

git push origin -u new-name

Die Schlussfolgerung lautet also

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name
Abdelrahman Mohamed
quelle
Diese Antwort bezieht sich auf git not github
gman
Dies ist für Git und GitHub ist unter Git, also wird es funktionieren und es funktioniert mit mir und mit anderen
Abdelrahman Mohamed
Es funktioniert nicht. Versuchen Sie den ersten und zweiten Schritt git branch -m new-name && git push origin :master new-name. Es wird scheitern. Wenn es bei dieser Antwort nur um Git und nicht um Github geht, ist diese Frage ein Duplikat mehrerer anderer Fragen und sollte geschlossen werden. Wenn es wirklich um Github geht, muss die Antwort Github abdecken. Diese Antwort nicht.
Gman
6

Sie können dies ohne Terminal tun. Sie müssen lediglich einen Zweig mit dem neuen Namen erstellen und den alten nach entfernen. Sie können diesen Beitrag verwenden, um das zu tun.

https://github.com/blog/1377-create-and-delete-branches

rneves
quelle
2

Folgendes hat bei mir funktioniert:

1.) Erstelle zuerst den neuen Zweig: git push github neuer Name: refs / Heads / neuer Name

2.) Gehen Sie auf der Github-Site zu den Einstellungen und ändern Sie den Standardzweig in newname

3.) Lösche den alten Namen git push github - lösche den alten Namen

Wiley
quelle
0
  1. Laden Sie Atlassian SourceTree (kostenlos) herunter .
  2. Importieren Sie Ihren lokalen Klon des Repositorys.
  3. Klicken Sie in der Seitenleiste mit der rechten Maustaste auf Ihren Zweig, um ihn umzubenennen. Wählen Sie im Kontextmenü "Zweig umbenennen ..." und benennen Sie ihn um.
  4. Zum Ursprung drücken.
Ingenieur
quelle
Danke, aber ich musste zum Zweig wechseln und ihn importieren.
Flash Sheridan
1
Diese Antwort bezieht sich auf git not github
gman
0

Dieser Artikel zeigt, wie es ganz einfach geht.
1. Um einen lokalen Git-Zweig umzubenennen, können Sie den Namen mit
git branch -m feature1 feature2
dem Befehl Git branch -m ändern: 2. Wenn Sie nur nach dem Befehl zum Umbenennen eines Remote-Git-Zweigs suchen, ist dies "
git push -u origin feature2:feature3
Überprüfen Sie, ob Sie keinen haben." Tags auf dem Zweig, bevor Sie dies tun. Sie können dies mit tun git tag.

Daniel Kobe
quelle
Diese Antwort bezieht sich auf git not github
gman
0

Eine andere Möglichkeit besteht darin , die folgenden Dateien umzubenennen :

  1. Navigieren Sie in Ihrem Projektverzeichnis
  2. umbenennen .git/refs/head/[branch-name]in.git/refs/head/new-branch-name
  3. umbenennen .git/refs/remotes/[all-remote-names]/[branch-name]in.git/refs/remotes/[all-remote-names]/new-branch-name

Benennen Sie head & remotes sowohl auf Ihrem lokalen PC als auch auf den Ursprüngen / Remote-Servern um.

Zweig wird jetzt umbenannt (lokal und remote!)


Beachtung

Wenn Ihr aktueller Filialname slashes ( /) enthält, erstellt git die Verzeichnisse wie folgt:

aktueller Filialname: "awe/some/branch"

  • .git/refs/head/awe/some/branch
  • .git/refs/remotes/[all-remote-names]/awe/some/branch

Wunsch Branchenname: "new-branch-name"

  1. Navigieren Sie in Ihrem Projektverzeichnis
  2. Kopieren Sie die branchDatei von.git/refs/*/awe/some/
  3. steck es rein .git/refs/head/.
  4. Kopieren Sie die branchDatei von allen.git/refs/remotes/*/awe/some/
  5. steck sie rein .git/refs/remotes/*/.
  6. Benennen Sie alle geöffneten branchDateien in um new-branch-name.
  7. Überprüfen Sie, ob die Verzeichnis- und Dateistruktur jetzt so aussieht:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. Machen Sie dasselbe auf allen Ihren Remote-Ursprüngen / Servern (falls vorhanden).
    • info : auf remote-server gibt es normalerweise keine refs / remotes / * verzeichnisse, da du bereits auf remote-server bist;) (naja, vielleicht ist es in fortgeschrittenen git-konfigurationen möglich, aber das habe ich noch nie gesehen)

Branch wird jetzt von awe/some/branchto umbenannt new-branch-name(lokal und remote!)

Verzeichnisse im Filialnamen wurden entfernt.


Info: Dieser Weg ist vielleicht nicht der beste, aber er funktioniert immer noch für Leute, die Probleme mit den anderen Wegen haben könnten

Iyashi
quelle
Diese Antwort bezieht sich auf git not github
gman
0

In meinem Fall benötigte ich einen zusätzlichen Befehl , damit mein umbenannter Zweig hochgeschoben werden konnte .
git branch --unset-upstream
origin newname

(Zur Erleichterung des Tippens), ich zuerst git checkout oldname.
Führen Sie dann Folgendes aus:

git branch -m newname
git push origin :oldname oder odergit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

Dieser zusätzliche Schritt ist möglicherweise nur erforderlich, weil ich (in der Regel) die Fernverfolgung in meinen Filialen über einrichte . Auf diese Weise brauche ich nach dem Auschecken nur noch den Typ anstattgit push -u origin oldnameoldnamegit pushgit push origin oldname

Wenn ich den Befehl vorher NICHT benutze , erstellt git neu und drängt darauf - meine Absicht zu besiegen.git branch --unset-upstreamgit push origin newbranch oldbranchnewbranchorigin oldbranch

SherylHohman
quelle
Diese Antwort bezieht sich auf git not github
gman
@ gman Punkt genommen. Meine Lösung verwendet git lokal, um einen Zweig auf GitHub remote umzubenennen, nachdem er in der lokalen Git-Kopie des GitHub-Repositorys umbenannt wurde. Vielleicht könnte es als spezielle Lösung angesehen werden, wenn Sie die Befehlszeile anstelle der GitHub-Website-Oberfläche verwenden möchten und einen lokalen Klon haben, den Sie ebenfalls aktualisieren möchten. Vielen Dank, dass Sie diese Unterscheidung hervorgehoben und klargestellt haben, dass diese Antwort eher für einen Sonderfall als für eine allgemeine Lösung gilt.
SherylHohman
Das Problem ist, dass Github Features an Zweige bindet. Versuchen Sie, den Master in main umzubenennen, und Ihre Anweisungen schlagen fehl.
Gman
-1

Mit den folgenden Befehlen wird der Zweig lokal umbenannt, der alte Zweig am Remote-Standort gelöscht und der neue Zweig verschoben, wobei der lokale Zweig so eingestellt wird, dass der neue Remote verfolgt wird:

git branch -m old_branch new_branch
git push origin :old_branch
git push --set-upstream origin new_branch
Pooja Mähne
quelle
Obwohl Ihr Code-Snippet das Problem möglicherweise löst, sollten Sie beschreiben, wozu Ihr Code dient (wie er das Problem löst). Darüber hinaus möchten Sie vielleicht stackoverflow.com/help/how-to-answer
Ahmad F
Diese Antwort bezieht sich auf git not github
gman
-1

So einfach ist das . Um git branch lokal umzubenennen und remote zu verwenden, verwenden Sie dieses Snippet (getestet und funktioniert wie ein Zauber):

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

Erläuterung:

  1. Schritt umbenennen:

    Git-Referenz: Wird mit der Option -m oder -M 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.

  2. Schritt löschen:

    Git-Referenz: git push origin: experimentell Suchen Sie im Ursprungs-Repository nach einer Referenz , die mit experimentell übereinstimmt (z. B. refs / Heads / experimentell), und löschen Sie sie.

  3. Update auf Remote Repo Schritt (Upstream-Referenz für Tracking):

    Git-Referenz: --set-upstream Fügen Sie für jeden Zweig, der aktuell ist oder erfolgreich gepusht wurde, eine Upstream-Referenz (Tracking-Referenz) hinzu, die von git-pull [1] ohne Argumente und anderen Befehlen verwendet wird. Weitere Informationen finden Sie unter branch..merge in git-config [1].

avivamg
quelle
Diese Antwort bezieht sich auf git not github
gman
-1

3 einfache Schritte

  • Git Push Origin Kopf

  • Git-Zweig -m alter-Zweig-Name neuer-Zweig-Name

  • Git Push Origin Kopf

Martin Mungai
quelle
Diese Antwort bezieht sich auf git not github
gman
-1

Führen Sie auf dem Git-Zweig git branch -m alter_name neuer_name aus. Dadurch wird der Zweigstellenname auf Ihrem lokalen Repo-Git-Push-Ursprung geändert: alter_name neuer_name Hiermit wird der geänderte Name auf remote verschoben und der alte Zweig gelöscht Remote-Zweig. Dies löst das Problem

Papst Franziskus
quelle
Diese Antwort bezieht sich auf git not github
gman