Wie funktionieren Git-Zweige? Kann ich den Hauptzweig entfernen?

22

Ich habe ein Projekt, das 2 Niederlassungen hat, Entwicklung und Produktion. Ich benutze den Master-Zweig nicht und jedes Mal, wenn ich schreibe git status, erfahre ich, wie weit mein Zweig vom Master entfernt ist.

Wenn ich versuche, den Hauptzweig zu löschen, wird git branch -d masterer nur in meinem lokalen Repository und nicht auf dem entfernten Git-Server gelöscht . Irgendwelche Ideen?

ufk
quelle

Antworten:

34

In Git ist ein Branch nur eine geordnete Liste von Commits (auch bekannt als Checkins). Etwas verwirrend für neue Benutzer kann sein, dass Branchen keinen Namen benötigen (obwohl Sie in den meisten Fällen einen möchten). und es gibt nichts Besonderes an einem bestimmten Zweig (der masterZweig ist nur der Standardzweig, der für Sie erstellt wird, wenn Sie ein Repository initialisieren).

Sie wissen das wahrscheinlich schon, aber Git unterscheidet sich von einigen anderen Versionskontrollsystemen wie dem beliebten "Subversion", da jede "Arbeitskopie" (in Subversion-Sprache) ein eigenes Repository ist ... in der Tat gibt es nichts Besonderes Besonderes über eine bestimmte Kopie; mit der Ausnahme, dass eine Kopie allgemein als die "kanonische" Kopie vereinbart wurde, in der das Endprodukt aufbewahrt wird.

Zurück zu Ihrer Frage ... Das "kanonische" Repository, das Sie beim Starten Ihrer lokalen Kopie geklont haben, enthielt standardmäßig einen "Master" -Zweig. und es steckt herum. Wenn Sie nun Zugriff auf den Computer hatten, der das Master-Repository enthält, können Sie sich anmelden und Folgendes ausführen:

git branch -d master

Wenn Sie dies jedoch nicht können, können Sie dies immer noch von Ihrem lokalen Computer aus tun. Der git branchBefehl hat eine -rOption, die sich auf das Remote-Repository auswirkt. Mit anderen Worten, der folgende Befehl sollte funktionieren:

git branch -d -r master

Beachten Sie, dass in beiden Fällen; Ich gehe davon aus, dass masterdies vollständig in den Entwicklungsverlauf eingeflossen ist, in dem sich Ihre lokale Kopie derzeit befindet. Wenn Sie noch nie masterzuvor verwendet haben (dh Sie haben nur bei developmentoder eingecheckt production), müssen Sie sich keine Sorgen machen. Wenn Sie (oder eine andere Person) bereits eingecheckt haben master, liegt möglicherweise ein Problem vor. Sie können einen Löschvorgang erzwingen, indem Sie in den obigen Befehlen den Befehl -dto ändern -D. aber ich empfehle dringend, mastervorher nachzusehen, was drin ist! Wenn Sie keinen Zugriff auf den Remotecomputer haben, können Sie ihn wahrscheinlich nicht wiederherstellen!


Apropos; Wenn Sie (oder jemand anderes) neu bei Git sind, empfehle ich dringend, Git aus Bottom Up von John Wiegley zu lesen . Obwohl ich Git ein bisschen alleine benutzt hatte, bevor ich diesen Artikel gefunden hatte, verstand ich nicht wirklich, wie es funktionierte, bis ich es las. Es ist sehr nützlich!

mparker17
quelle
3
Seit ich meinen ursprünglichen Kommentar geschrieben habe, hat sich das Verhalten von git leicht geändert. Ab Version 1.7.12 wird git branch -d -r masterder Remote-Zweig nicht mehr gelöscht - die Kenntnis Ihrer lokalen Kopie über den Remote-Zweig wird gelöscht . Das nächste Mal git fetch, wenn Sie , wird die Niederlassung zurück sein! Stattdessen möchten Sie ausgeführt werden git push origin :master. Im Wesentlichen verschieben Sie hier eine Null-Verzweigung (den leeren Verzweigungsnamen links von der :) über die entfernte Verzweigung (den Verzweigungsnamen rechts von der :) und löschen sie effektiv.
mparker17
Beachten Sie außerdem, dass Sie beim Klonen eines Repositorys normalerweise standardmäßig master auschecken. Dies hängt von der HEAD-Referenz in dem Repository ab, das Sie klonen. Stellen Sie daher nach dem Löschen des Masters sicher, dass der HEAD auf den Zweig zeigt, den Sie als Standard festlegen möchten.
Zitrax
Ihr Link zu Git aus Bottom Up ist gestorben, aber anscheinend ist dies der Text, auf den Sie sich beziehen. (?) Können Sie den Link in der Antwort bestätigen und möglicherweise aktualisieren?
ODER Mapper
ODER Mapper: Das ist der Text, auf den ich mich beziehe: Danke für den neuen Link! Ich habe den Link in der Antwort aktualisiert.
mparker17
4

masterist der Standardzweig für Git. Ich weiß nicht, warum es für Sie so schrecklich ist, wenn git Ihnen sagt, wie weit Sie vom Master entfernt sind, aber wenn Sie einen Zweig in Ihrem Remote-Repository löschen möchten, reicht es nicht aus, ihn lokal zu löschen. Versuchen Sie dies stattdessen:

git push origin :master

Dadurch wird nichts (der Teil vor dem Doppelpunkt) auf Ihren Ursprungsserver übertragen und der Master überschrieben. Mit anderen Worten, der Hauptzweig sollte remote gelöscht werden.

innaM
quelle
Ich erhalte: remote: error: weigere mich, den aktuellen Zweig zu löschen: refs / heads / master An github.com ***. Git! [Remote abgelehnt] Master-Fehler (Löschen des aktuellen Zweigs verboten): Einige Verweise konnten nicht an ' github.com ***. git'
gesendet werden
1
@Totty vielleicht kann dies helfen: matthew-brett.github.io/pydagogue/gh_delete_master.html
MEM