En aidant un ami à résoudre un problème de git aujourd'hui, j'ai du introduire une qui devait être totalement séparée de la branche master
branche. Le contenu de cette branche avait réellement une origine différente de ce qui avait été développé sur le master
mais ils allaient être fusionnés dans la master
à un moment ultérieur.
Je me suis souvenu en lisant le livre de John Wiegley Git de bas en haut haut comment les branches sont essentiellement une étiquette pour un commit qui suit une certaine convention. convention et comment un commit est lié à une arborescence de fichiers et, optionnellement à des commits parents. Nous sommes allés créer un commit sans parent dans le dépôt existant en utilisant la plomberie de Git :
Donc, nous nous sommes débarrassés de tous les fichiers dans l'index ...
$ git rm -rf .
... extrait des répertoires et des fichiers d'une archive, les ajoute à l'index l'index ...
$ git add .
... et créé un objet arbre ...
$ git write-tree
( git-write-tree
nous a indiqué le sha1sum de l'objet arbre créé).
Ensuite, nous avons commis l'arbre, sans spécifier les commits parents ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-tree
nous a indiqué le sha1sum de l'objet commit créé).
... et créé une nouvelle branche qui pointe vers notre nouveau nouvellement créée.
$ git update-ref refs/heads/other-branch $COMMIT
Enfin, nous sommes retournés à la master
pour continuer à y travailler.
$ git checkout -f master
Cela semble avoir fonctionné comme prévu. Mais ce n'est clairement pas le genre de procédure que je recommanderais à quelqu'un qui commence juste à utiliser l'utilisation de git, et c'est un euphémisme. Y a-t-il un moyen plus facile de créer une nouvelle branche qui n'est pas du tout liée à tout ce qui s'est passé dans le référentiel jusqu'à présent ?