Como fazer um novo ramo sem histórico

93

Tenho git repo com dois branches não relacionados, master e configs. Criei configurações, limpei todos os arquivos e coloquei apenas nos arquivos de configuração. Agora eu quero empurrar isso no repositório remoto, mas como se fosse um novo branch vazio (sem registros de todas as minhas alterações e revisões antigas do branch original).

Como posso limpar todo o histórico e empurrá-lo?

Tomas Pruzina
fonte

Respostas:

155

Limpar todos os arquivos não elimina o histórico. Você precisa primeiro criar um branch sem histórico e adicionar seus arquivos de configuração. Hoje em dia git checkouttem uma --orphanopção que faz uma filial sem histórico. Aqui estão as informações sobre a --orphanopção:

--orphan <new_branch>

Crie um novo branch órfão, denominado <new_branch>, iniciado a partir de <start_point> e mude para ele. O primeiro commit feito neste novo branch não terá pais e será a raiz de uma nova história totalmente desconectada de todos os outros branches e commits.

O índice e a árvore de trabalho são ajustados como se você tivesse executado anteriormente "git checkout <start_point>". Isso permite que você inicie um novo histórico que registra um conjunto de caminhos semelhantes a <start_point> executando facilmente "git commit -a" para fazer o commit do root.

Isso pode ser útil quando você deseja publicar a árvore de um commit sem expor seu histórico completo. Você pode querer fazer isso para publicar uma ramificação de código aberto de um projeto cuja árvore atual é "limpa", mas cujo histórico completo contém bits de código proprietários ou de outra forma sobrecarregados.

Se você deseja iniciar um histórico desconectado que registra um conjunto de caminhos que é totalmente diferente daquele de <start_point>, então você deve limpar o índice e a árvore de trabalho logo após criar o branch órfão executando "git rm -rf. " do nível superior da árvore de trabalho. Depois disso, você estará pronto para preparar seus novos arquivos, repovoando a árvore de trabalho, copiando-os de outro lugar, extraindo um tarball, etc.

Aqui está um link para a documentação de check-out . Você também pode correr git help checkouttambém.

Depois de criar seu branch sem histórico, quando você o enviar para o servidor, ele também não terá esse histórico. FWIW, isso me ajuda a pensar git pushcomo "fazer o branch remoto parecer igual ao meu local". Portanto, se você tiver história e empurrar, terá história. Se você não fizer isso, o branch enviado não.

John Szakmeister
fonte
36

Como posso limpar todo o histórico e empurrá-lo?

git checkout --orphan <name_you_choose_for_orphan_branch>
git commit

Então você pode executar o seu

git push <remote-name> <branch-name>


cf. este one-liner

Geremia
fonte
16

Eu precisava fazer isso para enviar a um freelancer algum código sem compartilhar informações privadas ou excluir meu histórico.

Caso algum de vocês esteja usando SourceTree, é assim que consegui fazer. Informe se eu fiz algo errado ou me esqueci de algo, pois não estou familiarizado com o gerenciamento de controle de origem.

  1. Eu fui para o botão do terminal na árvore de origem.
  2. Eu criei um novo branch 'órfão' usando o comando: 'git checkout --orphan clean-ver' onde clean-ver é o nome do meu branch
  3. Fechei o terminal e vi que meu log de commits foi apagado porque eu estava em um novo branch órfão. Eu testei todo o meu código-fonte e efetuei as alterações.
  4. Eu configurei meu repositório bitbucket em repositório> adicionar remoto ou repositório> configurações de repositório> adicionar.
  5. Fechei isso e cliquei no botão de pressão
  6. Selecionei meu novo branch 'clean-ver' e disse ok.

Quando verifiquei o bitbucket, parece que isso funcionou e descartou meu histórico de commits.

Espero que isso ajude alguém.

ThinkBonobo
fonte