Solución:
Eso en realidad se llama “eliminar la rama maestra anterior y crear una nueva desde cero”.
Esto creará una nueva rama maestra que apunta a la confirmación inicial:
git branch -D master
git checkout -b master <initial commit hash>
Esto creará una rama maestra totalmente nueva sin relación con lo que tuvieras:
git branch -D master
git checkout --orphan master
git rm -rf *
Pero en realidad, puede simplemente guardar el repositorio actual en algún otro lugar y crear un nuevo repositorio en su lugar.
Crear una rama huérfana
Primero, debe mover o eliminar su rama maestra actual. Personalmente, prefiero dejarlo a un lado en lugar de eliminarlo. Después de eso, simplemente crea una nueva rama sin padres usando el --orphan
bandera. Por ejemplo:
git branch -m master old_master
git checkout --orphan master
Dado que la rama actual ahora no tiene historial, algunos comandos pueden fallar con errores como fatal: bad default revision 'HEAD'
hasta después de realizar su primera confirmación en la nueva rama maestra. Esto es normal y es el mismo comportamiento que ve en los repositorios recién inicializados.
Otras respuestas sugieren crear una rama maestra nueva (como lo haría en un repositorio vacío). Pero tener un maestro sin historia no es una buena práctica. Hace que sea difícil usar rebase, ya que nunca se puede volver a ajustar la primera confirmación. La primera confirmación del maestro en cualquier repositorio debería estar vacía. Existe una solución de plomería de bajo nivel para esto:
Arreglar usando comandos de plomería de bajo nivel
Primero obtienes un hash de árbol vacío:
$ git hash-object -t tree /dev/null
4b825dc642cb6eb9a060e54bf8d69288fbee4904
Luego usa el hash del árbol para crear una confirmación vacía
$ git commit-tree -m "inital commit" 4b825dc642cb6eb9a060e54bf8d69288fbee4904
a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22
Y finalmente restableces al maestro a ese compromiso
$ git reset --hard a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22
Se describe con más detalle en mi entrada de blog.