¿Cómo "empezar de nuevo" en GitHub?

14

Planeo una reescritura completa de mi proyecto, usando otro marco, etc. Sería bueno mantener el código antiguo, incluido el historial, como referencia. ¿Cuál es la mejor manera de hacer esto, para evitar riesgos, confusión y sorpresas?

Mi idea es crear una nueva rama, reemplazar allí todo y obtener una versión "nueva" básica que se ejecute allí, etiquetar el último maestro "antiguo" y luego fusionar la rama con el maestro. ¿Suena esto razonable?

Landei
fuente
18
Esta pregunta parece ser sobre Git, no sobre Github.
user253751
Si no planea editar el código antiguo, solo quiera que le eche un vistazo fácilmente, puede usar una etiqueta. Pero se supone que las etiquetas son inmutables (pero siempre se puede eliminar, volver a agregar).
Travis
2
Crea un nuevo repositorio.
CodeGnome

Respuestas:

15

Voto por mantener todo en un único repositorio.

Me gustaría:

  1. Cree una nueva rama para apuntar a su código anterior
  2. Eliminar todo el código y confirmar en master
  3. Comience su reescritura en master.

Así es como:

# 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"

Aparte: también puede hacer una etiqueta del antiguo código heredado, si sabe que nunca querrá agregar ninguna confirmación.

Cuándo debería crear un nuevo repositorio en lugar de hacer esto:

  • Cuando su repositorio actual es prohibitivamente grande y la clonación es lenta. Es posible que desee considerar usar un nuevo repositorio.
Sixtyfootersdude
fuente
8

A menos que haya una razón apremiante para fusionar la reescritura y las ramas históricas, las mantendría separadas. Cree una nueva rama para mantener el código antiguo, vuelva a escribir en master y manténgalos separados de esa manera. De esa manera, siempre puede trabajar con el antiguo marco / implementación si la situación cambia.

SnoProblem
fuente
3

Para eso están las ramas huérfanas.

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

Es posible que deba configurarnew_branch temporalmente la rama predeterminada en Github, ya que muestra maestra de forma predeterminada.

Jürgen Paul
fuente
2

Puede crear una nueva rama en el proyecto actual, pero puede ser mejor marcar el repositorio como privado y luego crear uno nuevo para su nuevo código, de esa manera todavía tiene el antiguo repositorio pero no hay hinchazón por el trabajo obsoleto.

Le sugiero que adopte este enfoque en lugar de tratar de fusionar más tarde la rama de nuevo a maestro no solo porque todavía tendrá esa hinchazón del código obsoleto, sino también porque puede haber varios conflictos de fusión frustrantes para cuando esté listo para haz el tirón. Para evitar eso, sería mejor comenzar con una rama clara en lugar de fusionar dos completamente diferentes.

IIllIIll
fuente