Como "recomeçar" no GitHub?

14

Eu planejo uma reescrita completa do meu projeto, usando outra estrutura etc. Seria bom manter o código antigo, incluindo o histórico para referência. Qual é a melhor maneira de fazer isso, a fim de evitar riscos, confusão e surpresas?

Minha idéia é criar uma nova ramificação, substituir lá tudo e obter uma versão "nova" básica em execução, marcar o último mestre "antigo" e mesclar a ramificação ao mestre. Isso soa razoável?

Landei
fonte
18
Esta pergunta parece ser sobre o Git, não o Github.
user253751
Se você não planeja editar o código antigo, basta dar uma olhada em que você pode usar uma tag. Mas as tags devem ser imutáveis ​​(mas você sempre pode excluir, adicionar novamente).
Travis
2
Crie um novo repositório.
CodeGnome 2/16

Respostas:

15

Eu voto por manter tudo em um único repositório.

Eu gostaria:

  1. Crie uma nova ramificação para apontar para seu código antigo
  2. Exclua todo o código e confirme no mestre
  3. Inicie sua reescrita no mestre.

É assim:

# checkout the master branch
git checkout master

# create a new branch so you can find the old code easily
git branch oldStuff-KeepingForReference

# push the branch to github
git push origin oldStuff-KeepingForReference

# You currently have the master branch checked out
# so now cd to the project root and start your rewrite: 
cd <your project root>
rm -rf *

# Create a commit of the delete
git add --all *
git commit -m "Fresh start"

# Start your rewrite
echo "Some changes" > file.txt
git add file.txt
git commit -m "This is the first commit of the rewrite"

Além disso: você também pode criar uma tag do antigo código legado, se souber que nunca desejará adicionar nenhum commit a ele.

Quando você deve criar um novo repositório em vez de fazer isso:

  • Quando o repo atual é proibitivamente grande e a clonagem é lenta. Você pode considerar usar um novo repositório.
sixtyfootersdude
fonte
8

A menos que haja uma razão premente para mesclar as ramificações reescritas e históricas, eu as manteria separadas. Crie uma nova ramificação para manter o código antigo, reescreva-o no mestre e mantenha-os separados dessa maneira. Dessa forma, você sempre pode trabalhar com a estrutura / implementação antiga se a situação mudar.

SnoProblem
fonte
3

É para isso que servem os galhos órfãos.

git branch -m master new_branch       #rename the branch
git push origin new_branch:new_branch #push the old code
git push origin :master               #delete the origin/master branch containing the old code
git checkout --orphan master          #create a new orphane branch - master. The first commit made on this new branch will have no parents and it will be the root of a new history totally disconnected from all the other branches and commits.

echo foo > file.txt
git add file.txt
git commit -m 'init commit'
git push origin master

Pode ser necessário definirnew_branch temporariamente o ramo padrão como no Github, pois ele exibe o mestre por padrão.

Jürgen Paul
fonte
2

Você pode criar uma nova ramificação no projeto atual, mas pode ser melhor marcar o repositório como privado, em seguida, criar um novo para o seu novo código, assim você ainda possui o repositório antigo, mas não há inchaço no trabalho obsoleto.

Sugiro que você adote essa abordagem em vez de tentar mesclar novamente o ramo para dominar não apenas porque você ainda terá esse inchaço do código obsoleto, mas também porque pode haver vários conflitos frustrantes de mesclagem quando você estiver pronto para faça o puxão. Para evitar isso, seria melhor começar com um ramo claro, em vez de fundir dois completamente diferentes.

IIllIIll
fonte