Während ich heute einem Freund mit einem Git-Problem half, musste ich einen Zweig einführen, der völlig vom master
Zweig getrennt sein musste. Der Inhalt dieses Zweigs hatte wirklich einen anderen Ursprung als der, der auf dem master
Zweig entwickelt worden war, aber sie sollten master
zu einem späteren Zeitpunkt in den Zweig integriert werden.
Ich erinnerte mich, als ich John Wiegleys Git von unten nach oben las , wie Zweige im Wesentlichen eine Bezeichnung für ein Commit sind, das einer bestimmten Konvention folgt, und wie ein Commit an einen Baum von Dateien und optional an übergeordnete Commits gebunden ist. Wir haben ein übergeordnetes Commit für das vorhandene Repository mithilfe der Installation von git erstellt:
Also haben wir alle Dateien im Index entfernt ...
$ git rm -rf .
... Verzeichnisse und Dateien aus einem Tarball extrahiert, diese dem Index hinzugefügt ...
$ git add .
... und ein Baumobjekt erstellt ...
$ git write-tree
( git-write-tree
erzählte uns die sha1sum des erstellten Baumobjekts.)
Dann haben wir den Baum festgeschrieben, ohne übergeordnete Festschreibungen anzugeben ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-tree
hat uns die sha1sum des erstellten Commit-Objekts mitgeteilt.)
... und einen neuen Zweig erstellt, der auf unser neu erstelltes Commit verweist.
$ git update-ref refs/heads/other-branch $COMMIT
Schließlich kehrten wir in die master
Niederlassung zurück, um dort weiterzuarbeiten.
$ git checkout -f master
Dies scheint wie geplant funktioniert zu haben. Aber dies ist eindeutig nicht die Art von Verfahren, die ich jemandem empfehlen würde, der gerade erst anfängt, Git zu verwenden, um es milde auszudrücken. Gibt es eine einfachere Möglichkeit, einen neuen Zweig zu erstellen, der in keiner Beziehung zu allem steht, was bisher im Repository passiert ist?
( git checkout master && git merge --no-commit "orphan-branch" )
Einige ähnliche Tricks funktionieren mit Git-Reset oder dem Spielen mit dem Index. Dies hängt jedoch von Ihrem gewünschten Workflow ab.--no-commit
ongit merge
wird dies erreicht. Möglicherweise müssengit reset origin/master
Sie eine nachverfolgen, damit Ihr nächstes Commit dort abläuft, wo Sie möchten. Die Dateien aus Ihrem Orphan-Zweig werden jedoch als "nicht verfolgte Dateien" angezeigt, sofern Sie sie nicht auch in Ihre .gitignore-Datei aufnehmen.Aus dem Git Community Book :
quelle
rm .git/index
ist hässlich :-)Obwohl die Lösung mit
git symbolic-ref
und das Entfernen von Index funktioniert, ist es möglicherweise konzeptionell sauberer , ein neues Repository zu erstellendann holen Sie daraus
Jetzt können Sie / path / to / ohne Bezug löschen
quelle
git branch
oder beinhaltengit checkout
. Ich bin froh, dass Git so etwas möglich macht, aber warum sollte es nicht einfacher sein?git branch
und zwischen ihnen über wechselngit checkout BRANCH_NAME
.Github verfügt über eine Funktion namens Projektseiten, mit der Sie einen bestimmten benannten Zweig in Ihrem Projekt erstellen können, um Dateien bereitzustellen, die von Github bereitgestellt werden. Ihre Anweisungen lauten wie folgt:
Von dort aus haben Sie ein leeres Repository, zu dem Sie dann Ihren neuen Inhalt hinzufügen können.
quelle
Die aktuell ausgewählte Antwort ist richtig, ich würde das nur zufällig hinzufügen ...
Genau so können Benutzer mit github.com Github-Seiten für ihre Repos über einen verwaisten Zweig namens erstellen
gh-pages
. Die schönen Schritte werden hier gegeben und erklärt:https://help.github.com/articles/creating-project-pages-manually
Grundsätzlich lauten die git-Befehle zum Einrichten wie folgt:
git checkout --orphan gh-pages
(Erstellen Sie einen übergeordneten Zweig namens gh-pages in Ihrem Repo.)git rm -rf .
(Entfernt alle Dateien aus dem Zweigbaum)rm '.gitignore'
(sogar der Gitignore)Beachten Sie, dass Sie auch einen / docs-Ordner festlegen können Sie in Ihrem Repo als Quelle für die "Project Site" festlegen können, die Github zum Erstellen der Website verwendet.
Hoffe das hilft!
quelle
Manchmal möchte ich einfach sofort einen leeren Zweig im Projekt erstellen und dann mit der Arbeit beginnen. Ich werde nur den folgenden Befehl ausführen:
quelle
Wenn Ihr vorhandener Inhalt bereits festgeschrieben wurde, können Sie ihn jetzt (Git 2.18 Q2 2018) in einen eigenen neuen Orphan-Zweig extrahieren, da "
git rebase -i --root
" aktualisiert wurde, um die Sequenzer-Maschinerie besser nutzen zu können.Dieser Sequenzer ermöglicht es nun , die gesamte Topologie des Commit-Graphen an eine andere Stelle zu übertragen .
Siehe Commit 8fa6eea , Commit 9c85a1c , Commit ebddf39 , Commit 21d0764 , Commit d87d48b , Commit ba97aea (03. Mai 2018) von Johannes Schindelin (
dscho
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit c5aa4bc , 30. Mai 2018)quelle
Fand dieses Skript unter http://wingolog.org/archives/2008/10/14/merging-in-unrelated-git-branches und es funktioniert sehr gut!
quelle
git fetch $REMOTE $REMOTE_BRANCH:$LOCAL_BRANCH
. Vermisse ich etwas