434 Stimmen

Erstellen eines neuen leeren Zweigs für ein neues Projekt

Wir verwenden ein Git-Repository, um unser Projekt zu speichern. Wir haben unsere Zweige, die vom ursprünglichen Zweig abgehen. Nun wollen wir ein kleines neues Projekt erstellen, um eine Dokumentation zu erstellen. Dazu möchten wir einen neuen leeren Zweig erstellen, in dem wir unsere Dateien speichern, und ich möchte, dass andere Benutzer des Netzwerks diesen Zweig klonen.

Wie können wir das tun?

Ich habe einige Dinge ausprobiert, aber sie haben nicht funktioniert.

$ mkdir proj_doc; cd proj_doc
$ git init
$ git add .
$ git commit -m 'first commit'
$ git br proj_doc
$ git co proj_doc
$ git br -d master
$ git push origin proj_doc

Es scheint den Zweig zu pushen, aber wenn ich einen Fetch oder Pull ausführe, werden Informationen aus anderen Zweigen heruntergeladen, und dann erhalte ich auch einige zusätzliche Dateien aus anderen Projekten. Was ist die beste Lösung?

823voto

Hiery Nomus Punkte 16879

Sie können einen Zweig als Waise anlegen:

git checkout --orphan <branchname>

Dadurch wird ein neuer Zweig ohne Eltern erstellt. Dann können Sie das Arbeitsverzeichnis mit löschen:

git rm --cached -r .

und fügen Sie die Dokumentationsdateien hinzu, übertragen Sie sie und veröffentlichen Sie sie auf Github.

Ein Pull oder Fetch aktualisiert immer die lokalen Informationen über alle entfernten Zweige. Wenn Sie nur die Informationen für einen einzelnen entfernten Zweig abrufen wollen, müssen Sie diesen angeben.

76voto

Sid Jain Punkte 819

Die richtige Antwort ist, einen verwaisten Zweig zu erstellen. Ich erkläre im Detail, wie man das macht in meinem Blog. (Archivierter Link)

...

Bevor Sie beginnen, aktualisieren Sie auf die neueste Version von GIT. Um sicherzustellen, dass dass Sie die neueste Version verwenden, führen Sie

which git

Wenn er eine alte Version ausspuckt, müssen Sie möglicherweise die den Ordner mit der gerade installierten Version ergänzen.

Ok, wir sind bereit. Nachdem Sie mit cd in den Ordner gewechselt sind, der Ihr Git Checkout enthält, erstellen Sie eine verwaiste Verzweigung. Für dieses Beispiel nenne ich den Zweig "mybranch".

git checkout --orphan mybranch

Alles im verwaisten Zweig löschen

git rm -rf .

Einige Änderungen vornehmen

vi README.txt

Hinzufügen und Übertragen der Änderungen

git add README.txt
git commit -m "Adding readme file"

Das war's. Wenn Sie

git log

werden Sie feststellen, dass die Commit-Historie bei Null beginnt. Um zu wechseln zurück zu Ihrem Master-Zweig zu wechseln, führen Sie einfach

git checkout master

Sie können zu dem verwaisten Zweig zurückkehren, indem Sie

git checkout mybranch

34voto

maxrodrigo Punkte 1280

2022 Aktualisierung

Ab Git 2.23 können Sie mit git switch --orphan <new branch> um einen leeren Zweig ohne Historie zu erstellen. Anders als git checkout --orphan alle Verfolgt Dateien entfernt werden.

Sobald Sie auf diesem Zweig tatsächlich Commits haben, kann er in das entfernte Repository verschoben werden:

git switch --orphan <new branch>
git commit --allow-empty -m "Initial commit on orphan branch"
git push -u origin <new branch>

16voto

jthill Punkte 47948

Legen Sie einen leeren neuen Zweig wie folgt an:

true | git mktree | xargs git commit-tree | xargs git branch proj-doc

Wenn Ihre proj-doc-Dateien bereits in einem Commit unter einem einzigen Unterverzeichnis liegen, können Sie den neuen Zweig auf diese Weise erstellen:

git commit-tree thatcommit:path/to/dir | xargs git branch proj-doc

was bequemer sein könnte als git branch --orphan wenn Sie dann noch eine Menge von git rm y git mv zu tun.

Essayer

git branch --set-upstream proj-doc origin/proj-doc

und sehen Sie, ob das bei Ihrem Problem mit dem zu vielen Abrufen hilft. Auch wenn Sie wirklich nur einen einzigen Zweig abrufen wollen, ist es am sichersten, ihn auf der Kommandozeile anzugeben.

10voto

Kamal Hossain Punkte 513

Die beste Lösung ist die Erstellung eines neuen Zweigs mit --orphan Option wie unten gezeigt

git checkout --orphan <branch name>

Auf diese Weise können Sie einen neuen Zweig erstellen und direkt in den neuen Zweig auschecken. Es wird ein Zweig ohne Eltern sein.

Standardmäßig wird die --orphan Option entfernt nicht die Dateien im Arbeitsverzeichnis, so dass Sie die Dateien des Arbeitsverzeichnisses auf diese Weise löschen können:

git rm --cached -r

Was im Einzelnen die --orphan tut:

--orphan <new_branch>
Erstellen Sie einen neuen verwaisten Zweig mit dem Namen <new_branch> , gestartet von <start_point> und wechseln Sie zu ihr. Der erste Commit, der auf diesem neuen Zweig gemacht wird, wird keine Eltern haben und er wird die Wurzel einer neuen Geschichte sein, die von allen anderen Zweigen und Commits völlig getrennt ist.

Der Index und der Arbeitsbaum werden so angepasst, als hätten Sie zuvor git checkout <start_point> ausgeführt. So können Sie eine neue Historie beginnen, die eine Reihe von Pfaden ähnlich wie <Startpunkt> aufzeichnet, indem Sie einfach git commit -a ausführen, um die Root-Übertragung vorzunehmen.

Dies kann nützlich sein, wenn Sie den Baum einer Übergabe veröffentlichen wollen, ohne die gesamte Historie zu veröffentlichen. Sie könnten dies tun, um einen Open-Source-Zweig eines Projekts zu veröffentlichen, dessen aktueller Baum "sauber" ist, aber dessen vollständige Historie proprietäre oder anderweitig belastete Code-Stücke enthält.

Wenn Sie einen unverbundenen Verlauf beginnen wollen, der eine Reihe von Pfaden aufzeichnet, die sich völlig von denen von <Startpunkt> unterscheiden, sollten Sie den Index und den Arbeitsbaum direkt nach dem Erstellen des verwaisten Zweigs löschen, indem Sie git rm -rf . von der obersten Ebene des Arbeitsbaums aus ausführen. Danach können Sie Ihre neuen Dateien vorbereiten, indem Sie den Arbeitsbaum neu bevölkern, indem Sie sie von einem anderen Ort kopieren, einen Tarball extrahieren, usw.

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