2012-03-24 20 views
14

Mi proyecto tiene un archivo foo que he estado usando y registrándome con git. Acabo de hacer algunas refactorizaciones para que ya no necesite el archivo. Si lo hago git rm foo, ¿el archivo aún existirá en las confirmaciones más antiguas? ¿Podré verificar un compromiso anterior y trabajar con el archivo?¿Git rm elimina todo el historial de un archivo?

Respuesta

19

No, git rm (más la confirmación) escribe un nuevo árbol que refleja que el archivo ya no está presente. El historial completo del archivo, incluida la creación, las modificaciones y la eliminación final, está presente en el historial.

+0

¿No debería la primera palabra ser sí? Como él preguntó, ¿puede obtener los archivos de las confirmaciones previas? ¡Y quieres decir que sí! ¿Derecha? – PHcoDer

6

No, git rm solo eliminará el archivo del directorio de trabajo y agregará esa eliminación al índice. Por lo tanto, solo los compromisos futuros se ven afectados. Todas las confirmaciones anteriores permanecen iguales y el historial se mostrará cuando eliminó el archivo del repositorio.

En general, todas las confirmaciones que haya realizado previamente son permanentes, por lo que nunca debe preocuparse por perder las confirmaciones una vez que se encuentren en algún lugar de la historia. Por supuesto, hay algunas cosas que pueden eliminar o cambiar confirmaciones previas (como el rebasado), pero para la mayoría de las cosas que haces, estás bastante seguro.

+0

¿No debería la primera palabra ser sí? Como él preguntó, ¿puede obtener los archivos de las confirmaciones previas? ¡Y quieres decir que sí! ¿Derecha? – PHcoDer

+0

@PHcoDer I (y supongo que Daniel también) respondió a la pregunta en el título de la pregunta. Entonces, no, git rm no elimina todo el historial. – poke

5
  1. Podrá descargar cualquier versión anterior utilizando el ID de confirmación conocido con todos los estados que le pertenecen, incluidos los archivos que se eliminan ahora. Ver p. git branch <branchname> < start-point > donde start-point es una identificación de confirmación. Incluso no debe rastrear ese punto de inicio pertenece a la rama actual; Los ID de compromiso serán únicos, por lo que pueden estar en cualquier rama conocida por el repositorio actual.

  2. Puede verificar el historial anterior del archivo usando el comando log; pero no funciona en ninguna sintaxis, para 1.7.7 emitiré "git log - oldpath" en lugar de "git log oldpath" porque de lo contrario no se puede distinguir la ruta de la revisión. Para algunos otros comandos como "culpa", incluso esto no es suficiente: uno debe verificar la revisión anterior para iniciarla.

Cuestiones relacionadas