888 Stimmen

Umbenennen des Master-Zweigs für lokale und entfernte Git-Repositories

Ich habe den Zweig master die den entfernten Zweig verfolgt origin/master .

Ich möchte sie umbenennen in master-old sowohl lokal als auch auf der Gegenstelle. Ist dies möglich?

Für andere Nutzer, die Folgendes verfolgt haben origin/master (und die immer ihre lokalen master Abzweigung über git pull ), was würde passieren, nachdem ich den entfernten Zweig umbenannt habe?
Würden ihre git pull immer noch funktionieren, oder würde es eine Fehlermeldung ausgeben, dass es nicht gefunden werden konnte origin/master mehr?

Anschließend möchte ich eine neue master Zweigstelle (sowohl lokal als auch remote). Nachdem ich dies getan habe, was würde nun passieren, wenn die anderen Benutzer git pull ?

Ich vermute, dass all dies zu einer Menge Ärger führen würde. Gibt es einen sauberen Weg, um zu bekommen, was ich will? Oder sollte ich einfach die master und erstellen Sie einen neuen Zweig master-new und dort einfach weiterarbeiten?

2 Stimmen

Das in der akzeptierten Antwort angegebene Rezept gilt für eine Verzweigung mit beliebigem Namen, aber die Vorbehalte (wie angemerkt) gelten nicht aufgrund der (standardmäßigen) Sonderrolle der Meister Zweig in Git.

3 Stimmen

@kynan: Ich glaube, ich verstehe nicht ganz. Welche Vorbehalte gelten für Master und nicht für andere Zweige? Wenn es sich um einen Zweig mit dem Namen xy handelt und andere Leute diesen Zweig verfolgt haben, was wäre dann der Unterschied?

4 Stimmen

Der Vorbehalt ist, dass Sie den entfernten Master normalerweise nicht löschen können. Das gilt allerdings nicht für die Antwort von Aristoteles, so dass Sie diese als akzeptierte Antwort markieren sollten. Sie haben recht, jede git push -f beeinträchtigt die Fähigkeit zur pull von einem beliebigen Remote-Tracking-Zweig aus.

12voto

Cascabel Punkte 449595

Ich gehe davon aus, dass Sie immer noch nach der gleichen Situation fragen wie in Ihrer vorherige Frage . Das heißt, dass master-new in seiner Geschichte nicht master-old enthält.* Wenn Sie master-new "master" nennen, haben Sie die Geschichte praktisch neu geschrieben. Es spielt keine Rolle wie Sie gelangen in einen Zustand, in dem der Meister nicht von einer früheren Position des Meisters abstammt, sondern sich einfach in diesem Zustand befindet.

Andere Benutzer, die versuchen zu pullen, während master nicht existiert, werden mit ihren Pulls einfach scheitern (kein solcher ref auf remote), und sobald es wieder an einem neuen Ort existiert, werden ihre Pulls versuchen müssen, ihren master mit dem neuen remote master zusammenzuführen, genauso wie wenn Sie master-old und master-new in Ihrem Repository zusammenführen. In Anbetracht dessen, was Sie hier versuchen, würde die Zusammenführung zu Konflikten führen. (Wenn diese aufgelöst würden und das Ergebnis zurück in das Projektarchiv gepusht würde, wären Sie in einem noch schlimmeren Zustand - beide Versionen der Geschichte wären da).

Um Ihre Frage einfach zu beantworten: Sie sollten akzeptieren, dass es manchmal Fehler in Ihrer Geschichte geben wird. Das ist in Ordnung. Das passiert jedem. Im git.git-Repository gibt es rückgängig gemachte Übertragungen. Das Wichtigste ist, dass, sobald wir die Geschichte veröffentlichen, jeder ihr vertrauen kann.

*Wenn dies der Fall wäre, wäre es gleichbedeutend mit dem Verschieben einiger Änderungen auf Master und dem anschließenden Erstellen eines neuen Zweigs an der Stelle, an der er vorher war. Kein Problem.

0 Stimmen

Ja, es ist das gleiche Problem, ich hatte nur eine Idee, wie man es lösen kann. Aber auch wenn ich nicht diese Zweig-Umbenennung tun würde, war ich interessant, wenn es möglich wäre. Ich dachte, solche Verweise wie "Master" sind nur Referenzen auf bestimmte Commits. Ich möchte wirklich keine Geschichte ändern. Ich dachte, ich würde die Master-Referenz einfach auf einen anderen Kopf verweisen. Das bedeutet auch, dass ich nie wieder einen Zweignamen verwenden kann, wenn ich ihn schon einmal verwendet habe?

0 Stimmen

Zweige sind in der Tat Referenzpunkte - Zeiger auf Commits. Die Sache ist die, dass wir erwarten, dass sich der Kopf eines Zweiges auf eine bestimmte Art und Weise entwickelt (nämlich immer im Schnelldurchlauf). Aus der Sicht eines anderen, ist das Verschieben eines Zweiges in Ihrem öffentlichen Repo das gleiche wie das Umschreiben der Geschichte des Zweiges. Er verweist nicht mehr auf einen Commit, der alles enthält, was er früher enthielt.

10voto

O.O Punkte 7013

El ausgewählte Antwort scheiterte, als ich es versuchte. Es wird ein Fehler ausgegeben: refusing to delete the current branch: refs/heads/master . Ich denke, ich werde posten, was für mich funktioniert:

git checkout master             # If not in master already

git branch placeholder          # Create placeholder branch
git checkout placeholder        # Check out to placeholder
git push remote placeholder     # Push placeholder to remote repository

git branch -d master            # Remove master in local repository
git push remote :master         # Remove master from remote repository.

Der Trick besteht darin, in den Platzhalter auszuchecken, bevor man ihn in das entfernte Repository verschiebt. Der Rest ist selbsterklärend; das Löschen des Master-Zweigs und das Verschieben in das entfernte Repository sollte jetzt funktionieren. Auszug aus aquí .

0 Stimmen

Es würde bei git push remote :master fehlschlagen, wenn dies auf der entfernten Seite überprüft wird - Sie werden "remote: error:" als Präfix in den Fehlerprotokollzeilen sehen.

2voto

Melden Sie sich am Server an, gehen Sie in das Git-Verzeichnis und benennen Sie den Zweig im Bare Repository um.

Dies hat nicht alle Probleme, die mit dem erneuten Hochladen desselben Zweigs verbunden sind. Die "Clients" erkennen den geänderten Namen automatisch und ändern ihre Remote-Referenz.

Danach (oder vorher) können Sie auch den lokalen Namen des Zweigs ändern.

10 Stimmen

Ich habe die Anmeldedaten für den Github-Server vergessen. Jemand mit Anmeldeinformationen da draußen :-P

2voto

Alireza Punkte 92209

OK Umbenennung eines Zweigs sowohl vor Ort und weiter die Fernbedienung ist ziemlich einfach!...

Wenn Sie auf den Zweig, können Sie leicht tun:

git branch -m <branch>

oder wenn nicht, müssen Sie es tun:

git branch -m <your_old_branch> <your_new_branch>

Drücken Sie dann die Löschtaste auf der Fernbedienung wie folgt:

git push origin <your_old_branch>

Jetzt sind Sie fertig.

Wenn Sie einen Upstream-Fehler erhalten, während Sie versuchen, zu pushen, tun Sie es einfach:

git push --set-upstream origin <your_new_branch>

Ich habe auch das folgende Bild erstellt, um die Schritte in einer echten Befehlszeile zu zeigen. Befolgen Sie einfach die Schritte und Sie werden gut sein:

Enter image description here

0 Stimmen

Ihr Vorschlag, die Löschung zu pushen, hat nicht funktioniert, ich musste Folgendes ausführen: git push origin --delete <Ihr_alter_Zweig>

1voto

Hannes Tydén Punkte 67

Worüber?

git checkout old-branch-name
git push remote-name new-branch-name
git push remote-name :old-branch-name
git branch -m new-branch-name

1 Stimmen

Bringt die Verzweigungsverfolgung durcheinander - Benutzer müssen ihre Verzweigung möglicherweise lokal korrigieren?

0 Stimmen

Eine Erklärung wäre angebracht.

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