2012-03-10 23 views

Respuesta

8

No hay manera.

Normalmente, git rm comprueba que los archivos ya se han confirmado antes de eliminarlos, para que no pierda nada de su trabajo. Sin embargo, al usar -f se anula esta comprobación.

En resumen:

  • No utilice -f.
  • No toque nada que no haya cometido.
+2

Al igual que unix - '-f' significa que es mejor que esté seguro de lo que está haciendo. –

1

No, hasta donde yo sé. Creo que git desvincula los archivos, al igual que rm -rf. No le importa si sabe sobre los archivos o no, con mucho gusto nukeará el directorio. En realidad, su único recurso es intentar utilizar una herramienta de recuperación de archivos como si tuviera hecho rm -rf

0

Si git no rastrea el directorio dirname, no se permitirá borrar el directorio con git rm -rf ya que no sabe nada de él. Usted (tendría) obtener un error como

fatal: pathspec 'dirname' did not match any files 

única forma en que podría haber eliminado es si se hubiera hecho un git add . o git add dirname después de la git init. Si ese es el caso, tus archivos se han ido y no puedes recuperarlos, ya que nunca se ha confirmado y git no los rastrea. Es tan bueno como haciendo un rm -rf en una carpeta normal (y no se puede recuperar a menos que tenga copias de seguridad)

+0

¿Lo hace, sin embargo? No lo probé, pero pensé que la bandera -f suprimirá ese error. – Matt

+0

A menos que use '-f'? Eso "anulará el control actualizado", sea lo que sea que eso signifique. –

+0

@Matt - No, no suprime eso. '-f' en' git rm' es solo para anular la verificación actualizada. – manojlds

0

git reset --hard ayudó mientras que la supresión no se obligaba todavía y, en términos generales, la supresión fue interrumpida por Ctrl+Z

1

Advertencia: Corriendo git prune sin la opción -n (1) borrará sus datos inalcanzables.

Puede haber una forma, usando git prune y git cat-file.

Correr git prune -n lista qué objetos se elimina mediante la poda:

$ git prune -n 
9cc84ea9b4d95453215d0c26489d6a78694e0bc6 blob 
c315143703752ef4d11ca7d93f2c324872b2ebff blob 

Cada línea corresponde a un archivo borrado.

Ahora, usando git cat-file, somos capaces de recuperar el contenido del archivo eliminado en un nuevo archivo:

git cat-file -p 9cc84ea9b4d95453215d0c26489d6a78694e0bc6 > restored-filename.whatever 

(1) A partir de los git prune docs:

NOMBRE
git-prune - Podar todos los objetos inalcanzables de la base de datos de objetos

OPCIONES
-n
--dry-run
No quite nada; solo informa lo que eliminaría.