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?
( git checkout master && git merge --no-commit "orphan-branch" )
Alguns truques semelhantes funcionarão usando git-reset ou jogando com o índice. Mas isso depende do seu fluxo de trabalho desejado.--no-commit
ongit merge
conseguirá isso. Pode ser necessário fazer um acompanhamentogit reset origin/master
para que seu próximo commit vá para onde você quiser, mas os arquivos do seu ramo órfão aparecerão como "arquivos não rastreados", a menos que você também os inclua no arquivo .gitignore.Do livro da comunidade Git :
fonte
rm .git/index
é feio :-)Embora a solução com
git symbolic-ref
e removendo o índice funcione, pode ser conceitualmente mais limpo criar um novo repositórioentão busque nele
Agora você pode excluir / caminho / para / não relacionado
fonte
git branch
ougit checkout
. Fico feliz que o git torne esse tipo de coisa possível, mas por que não deveria ser mais fácil?git branch
e alternar entre eles viagit checkout BRANCH_NAME
.O Github possui um recurso chamado Project Pages, no qual você pode criar uma ramificação nomeada específica no seu projeto para fornecer arquivos que serão atendidos pelo Github. Suas instruções são as seguintes:
A partir daí, você tem um repositório vazio ao qual pode adicionar seu novo conteúdo.
fonte
A resposta atualmente selecionada está correta, gostaria de acrescentar que por coincidência ...
Na verdade, é exatamente assim que o github.com permite que os usuários criem páginas do Github para seus repositórios, por meio de um ramo órfão chamado
gh-pages
. Os passos bonitos são dados e explicados aqui:https://help.github.com/articles/creating-project-pages-manually
Basicamente, os comandos git para configurar isso são os seguintes:
git checkout --orphan gh-pages
(crie um ramo sem pai chamado gh-pages no seu repositório)git rm -rf .
(remove todos os arquivos da árvore de trabalho da ramificação)rm '.gitignore'
(até o gitignore)Observe que você também pode designar uma pasta / docs no repositório para ser a fonte do "Site do Projeto" que o Github usa para criar o site.
Espero que isto ajude!
fonte
Às vezes, eu só quero criar uma ramificação vazia no projeto instantaneamente e começar a trabalhar, apenas executarei o seguinte comando:
fonte
Se seu conteúdo existente já foi confirmado, você agora (Git 2.18 Q2 2018) pode extraí-lo em seu novo ramo órfão, desde a implementação de "
git rebase -i --root
" foi atualizada para usar mais o mecanismo do seqüenciador.Esse sequenciador é o que agora permite transplantar toda a topologia do gráfico de confirmação em outro lugar .
Consulte commit 8fa6eea , commit 9c85a1c , commit ebddf39 , commit 21d0764 , commit d87d48b , commit ba97aea (03 de maio de 2018) por Johannes Schindelin (
dscho
) .(Mesclado por Junio C Hamano -
gitster
- no commit c5aa4bc , 30 de maio de 2018)fonte
Encontrei esse script em http://wingolog.org/archives/2008/10/14/merging-in-unrelated-git-branches e funciona muito bem!
fonte
git fetch $REMOTE $REMOTE_BRANCH:$LOCAL_BRANCH
. Estou esquecendo de algo?