Mentre aiutavo un amico con un problema git oggi, ho dovuto introdurre un ramo che doveva essere totalmente separato dal masterramo. I contenuti di questo ramo avevano davvero un'origine diversa da quella che era stata sviluppata sul masterramo, ma sarebbero stati fusi nel masterramo in un secondo momento.
Mi sono ricordato dalla lettura di Git di John Wiegley dal basso verso l'alto come i rami sono essenzialmente un'etichetta per un commit che segue una certa convenzione e come un commit è legato a un albero di file e, facoltativamente, ai commit dei genitori. Siamo andati a creare un commit senza genitori per il repository esistente usando l'idraulico di git:
Quindi ci siamo sbarazzati di tutti i file nell'indice ...
$ git rm -rf .
... estratti directory e file da un tarball, aggiunti quelli all'indice ...
$ git add .
... e creato un oggetto ad albero ...
$ git write-tree
( git-write-treeci ha detto lo sha1sum dell'oggetto albero creato.)
Quindi, abbiamo eseguito il commit dell'albero, senza specificare i commit dei genitori ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-treeci ha detto lo sha1sum dell'oggetto commit creato.)
... e creato un nuovo ramo che punta al nostro commit appena creato.
$ git update-ref refs/heads/other-branch $COMMIT
Alla fine, siamo tornati alla masterfiliale per continuare a lavorare lì.
$ git checkout -f master
Questo sembra aver funzionato come previsto. Ma questo non è chiaramente il tipo di procedura che consiglierei a qualcuno che sta appena iniziando a usare git, per dirla in parole povere. Esiste un modo più semplice per creare un nuovo ramo completamente estraneo a tutto ciò che è accaduto finora nel repository?