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?