Enquanto ajudava um amigo com um problema de git hoje, tive que introduzir um ramo que precisava ser totalmente separado do master
ramo. O conteúdo desse ramo realmente tinha uma origem diferente do que havia sido desenvolvido no master
ramo, mas eles seriam mesclados nomaster
ramo posteriormente.
Lembrei-me de ler o Git de John Wiegley de baixo para cima como os ramos são essencialmente um rótulo para um commit que segue uma certa convenção e como um commit está vinculado a uma árvore de arquivos e, opcionalmente, aos commit dos pais. Criamos um commit sem pai no repositório existente usando o encanamento do git:
Então nos livramos de todos os arquivos no índice ...
$ git rm -rf .
... extraiu diretórios e arquivos de um tarball, adicionou-os ao índice ...
$ git add .
... e criou um objeto em árvore ...
$ git write-tree
(git-write-tree
nos disse o sha1sum do objeto de árvore criado.)
Em seguida, confirmamos a árvore, sem especificar os pais confirmados ...
$ echo "Imported project foo" | git commit-tree $TREE
( git-commit-tree
nos disse o sha1sum do objeto de confirmação criado.)
... e criou uma nova ramificação que aponta para nosso recém-criado commit.
$ git update-ref refs/heads/other-branch $COMMIT
Finalmente, voltamos à master
filial para continuar trabalhando lá.
$ git checkout -f master
Isso parece ter funcionado como planejado. Mas esse claramente não é o tipo de procedimento que eu recomendaria para alguém que está começando a usar o git, para dizer o mínimo. Existe uma maneira mais fácil de criar uma nova ramificação que não tenha relação com tudo o que aconteceu no repositório até agora?