Erstellen Sie einen leeren Zweig auf GitHub

115

Ich möchte einen neuen GitHub-Zweig namens erstellen release.

Dieser Zweig muss leer sein ! Es gibt jedoch einen Zweig mit x Commits, und ich möchte keinen Commit-Verlauf haben.

Die einzige Methode, die ich gefunden habe, ist das Erstellen eines lokalen --orphan Zweigs.

Sebastian Schneider
quelle
3
Mögliches Duplikat von Commit vor dem Root-Commit in Git einfügen?
msw
1
Warum willst du das tun? Sie können das leere Set "Fred" nennen, aber es ist immer noch das leere Set.
msw
Wenn Sie uns mehr darüber erzählen, warum Sie dies tun möchten, kann dies uns helfen, gute Antworten zu finden.
Willoller
Alles, was Sie mit git machen, ist lokal, bis Sie es mit auf den GitHub-Server übertragen git push origin _branch_.
Joe

Antworten:

239

Was ist los mit der --orphanOption? Wenn Sie einen Zweig möchten, der leer ist und keine Historie hat, ist dies der richtige Weg ...

git checkout --orphan empty-branch

Dann können Sie alle Dateien entfernen, die Sie im Staging-Bereich haben (damit sie nicht festgeschrieben werden):

git rm -rf .

Zu diesem Zeitpunkt befindet sich auf Ihrem Computer ein leerer Zweig.

Bevor Sie auf GitHub (oder ein anderes Git-Repository) pushen können, benötigen Sie mindestens ein Commit, auch wenn es keinen Inhalt enthält (dh leeres Commit), da Sie keinen leeren Zweig pushen können

git commit --allow-empty -m "root commit"

Schieben Sie es schließlich zur Fernbedienung und öffnen Sie ein Bier

git push origin empty-branch
C. Augusto Proiete
quelle
3
Hallo, nach dem Erstellen eines leeren Zweigs zeigt das Github-Repository keinen Dateiunterschied an, wenn ich versuche, eine Pull-Anfrage von einem anderen Zweig zu erstellen. Können Sie mir sagen, wie ich das lösen kann?
Raghavendra S
@ RaghavendraS Siehe meine Antwort. Ich hatte das gleiche Problem.
Greg M. Krsak
1
Vielleicht haben einige Leute ein Problem mit dieser akzeptierten Antwort, weil ein git add .Schritt fehlt , nachdem Sie alle Dateien entfernt haben und bevor Sie sich verpflichten?
SCoyle
13

--orphan ist gut geeignet, um einen leeren Zweig lokal zu erstellen. Um ihn jedoch zu pushen oder mit anderen Zweigen zu interagieren, benötigen Sie ein Commit.

Das Erstellen eines neuen Commits für einen verwaisten Zweig ist keine gute Idee, da Sie nicht mit anderen Zweigen interagieren können. Dh

git checkout --orphan test
git commit --allow-empty -m "init test branch"
git merge master
fatal: refusing to merge unrelated histories

Stattdessen sollten Sie es vorziehen, einen neuen Zweig aus dem ersten Commit des Masters zu erstellen. Wenn das Commit nicht leer ist, können Sie vor dem ersten ein leeres Commit hinzufügen, wie in @houtanb erläutert.

Das ist mein Design
quelle
5

Sie können auch den Anweisungen hier folgen , um ein leeres Commit im Stammverzeichnis Ihres masterZweigs zu erstellen . Erstellen Sie dann einfach Ihren releaseZweig, in dem sich das leere Root-Commit befindet.

houtanb
quelle
2

Die akzeptierte Antwort führte mich zu einigen Problemen , also tat ich dies:

$ git branch
* staging
$ git branch master c74d99cf46f6ed23e742f2617e9908294b4a608b
$ git checkout master
Switched to branch 'master'

Und bekam, was ich wollte und ohne Probleme beim Zusammenführen / Ziehen. Ich musste nur ein Basis-Commit auswählen, um meinen zweiten Zweig daraus zu erstellen .

Greg M. Krsak
quelle
Wenn Ihr Zweig per Definition über ein Basis-Commit verfügt, handelt es sich nicht um einen leeren Zweig. Was waren die Probleme, die Sie beim Erstellen eines verwaisten Zweigs hatten?
C. Augusto Proiete