¿Cómo restablecer un repositorio Git remoto para eliminar todas las confirmaciones?

164

¿Cómo puedo restablecer un repositorio Git remoto y local para eliminar todas las confirmaciones?

Me gustaría comenzar de nuevo con el Head actual como el commit inicial.

Priyank Bolia
fuente
No quiero elegir ni hacer nada más, solo quiero eliminar todos los cambios y restablecer el repositorio público también. Como soy un nuevo usuario de Git, hice algunos commits incorrectos. Eliminar el directorio .GIT no es una opción ya que también hay un repositorio público.
Priyank Bolia
También puede hacer un empuje forzado, por lo que eliminar el directorio .git es realmente una opción.
Lilith River el
2
solo quisquilloso, pero "revisión" es una terminología svn y no tiene mucho sentido en una historia en forma de árbol.
Tamás Szelei
2
@ TamásSzelei "Revisión" es un sinónimo perfectamente aceptable de "compromiso". Se usa tanto en el libro Pro Git (por ejemplo, aquí ) como en las páginas de manual de Git.
jub0bs

Respuestas:

348

Completamente restablecer?

  1. Eliminar el .gitdirectorio localmente.

  2. Recrea el repositorio git:

    $ cd (project-directory)
    $ git init
    $ (add some files)
    $ git add .
    $ git commit -m 'Initial commit'
    
  3. Empuje al servidor remoto, sobrescribiendo. Recuerde que va a fastidiar a todos los demás haciendo esto ... será mejor que sea el único cliente.

    $ git remote add origin <url>
    $ git push --force --set-upstream origin master
    
Río Lilith
fuente
1
pero las confirmaciones se han ido y el repositorio se restablece. ¿Podemos eliminar esos mensajes anteriores también delante de los nombres de archivo?
Priyank Bolia
2
Elimine el repositorio remoto directamente en GitHub y vuelva a crearlo allí.
Bombe
1
Debería ser git push --force en lugar de git push -force
William Notowidagdo
66
Si no desea confirmar ningún archivo en su "Confirmación inicial", simplemente no puede agregar ningún archivo y agregar el --allow-emptyindicador al final de git commit -m 'Initial commit'.
raf
2
Usando Git 2.3.2, tuve que usar git push --force --set-upstream origin masterPero todo el resto funcionaba como se describe
Sébastien Stormacq
6

Primero, siga las instrucciones en esta pregunta para aplastar todo a una sola confirmación. Luego haga un empuje forzado hacia el control remoto:

$ git push origin +master

Y, opcionalmente, elimine todas las demás ramas, tanto local como remotamente:

$ git push origin :<branch>
$ git branch -d <branch>
R. Martinho Fernandes
fuente
0

Si yo fuera tú, haría algo como esto:

Antes de hacer algo, conserve una copia (más vale prevenir que curar)

git checkout master
git checkout -b temp 
git reset --hard <sha-1 of your first commit> 
git add .
git commit -m 'Squash all commits in single one'
git push origin temp

Después de hacer eso, puede eliminar otras ramas.

Resultado: vas a tener una rama con solo 2 commits.

¡Utilícelo git log --onelinepara ver sus commits de una manera minimalista y para encontrar SHA-1 para commits!

Kwnstantinos Nikoloutsos
fuente