2012-03-19 10 views
8

La primera vez que juego con git, y accidentalmente agregué todos los archivos ocultos con mi confirmación. Ahora que configuré mi .gitignore y comprometí mis cambios, todos los archivos que terminan con "~" todavía están allí.Eliminar archivos del maestro en github

¿Cómo confirmo mis archivos locales y los elimino del maestro que se supone que ya no existen?

+0

Te refieres además de la forma normal de hacer git rm y cometerlo? ¿Desea reescribir el historial como si el compromiso nunca hubiera sucedido? – Kaz

+0

Puedes hacer eso; simplemente reinicia tu cabeza antes de la confirmación y empuja eso al repositorio, haciendo que la cabeza. El repositorio tiene que ser configurado para permitir empujes sin avance rápido. Además, cualquiera que saque de ese repositorio tendrá que hacer un reinicio completo para seguir ese cambio. La confirmación se convierte en basura ya que no se referencia; se recolecta basura (en 45 días o algo así?) – Kaz

Respuesta

16

Utilice git rm --cached FILENAME para eliminarlo del repositorio pero mantenga el archivo físicamente y git add FILENAME para agregar un archivo a su repositorio. Usted tendrá que comprometerse tanto de estos cambios con git commit

+2

No sabía sobre el indicador '' --cached''. +1 por eso. :) –

+0

¿Hay alguna manera de eliminar todos los archivos sin seguimiento/ignorados, por lo que no tengo que hacerlo manualmente? Gedit crea un archivo oculto para todo lo que aparentemente abrió. – danielsvane

+0

¿Los archivos están repartidos por toda la estructura de tu directorio? Si no, use algunas utilidades de la GUI como tortoisegit para hacer eso fácilmente. – Shocker

0
Here is a DOS batch file that can help: 

SET count=1 
FOR /F "tokens=*" %%G IN ('dir /s /b *.dll') DO (call :subroutine "%%G") 
FOR /F "tokens=*" %%G IN ('dir /s /b *.pdb') DO (call :subroutine "%%G") 
FOR /F "tokens=*" %%G IN ('dir /s /b *.txt') DO (call :subroutine "%%G") 
FOR /F "tokens=*" %%G IN ('dir /s /b *.cache') DO (call :subroutine "%%G") 
FOR /F "tokens=*" %%G IN ('dir /s /b *.force') DO (call :subroutine "%%G") 
GOTO :eof 

:subroutine 
    git rm --cached %1 
    set /a count+=1 
    GOTO :eof 
Cuestiones relacionadas