Tengo un viejo compromiso que hice hace unas semanas. Quiero restaurar solo un archivo de esa confirmación. ¿Qué debo hacer?
Tengo un viejo compromiso que hice hace unas semanas. Quiero restaurar solo un archivo de esa confirmación. ¿Qué debo hacer?
Respuestas:
git checkout 'master@{7 days ago}' -- path/to/file.txt
Esto no alterará HEAD, simplemente sobrescribirá el archivo local path/to/file.txt
Consulte man git-rev-parse para ver las posibles especificaciones de revisión allí (por supuesto, un simple hash (like dd9bacb
) funcionará bien)
No te olvides de cometer el cambio (después de una revisión ...)
revision-specification
que ya que eso es lo que el OP preguntó :)
shacommit~1
(ej . git checkout 0f4bbdcd~1 -- path/to/file.txt
:) para obtener la confirmación inmediatamente antes.
git checkout [Revision_Key] -- path/to/file
.git checkout
puede manejar archivos individuales (ver respuesta de sehe), no es necesario copiar y pegar.
HEAD
, ORIG_HEAD
o cualquiera de los que se combina con ^
/ ~
/ @
notación de estilo.
Necesitaba restaurar un archivo reciente comprometido en git. Entonces, solo para reiterar y dar otra perspectiva, debe hacerlo ejecutando los siguientes dos pasos:
git log -3
Esto muestra las tres confirmaciones más recientes. Lea los comentarios y el nombre del autor para limitar la versión exacta que desea. Escriba esa identificación de confirmación larga (es decir, b6b94f2c19c456336d60b9409fb1e373036d3d71) para la versión de confirmación que desea.
git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 - myfile.java
Pase el id de confirmación Y el nombre del archivo que desea restaurar. Asegúrese de tener un espacio antes y después del guión doble.
Hay muchas otras formas de hacerlo. Pero este es el más simple que puedo recordar. Espero que ayude.
NOTA: Si está dentro de la ruta / carpeta de su proyecto, entonces no es necesario escribir la ruta completa del archivo en el comando de pago.
Todas las respuestas mencionan git checkout <tree-ish> -- <pathspec>
. A partir de git v2.23.0 hay un nuevo método de restauración de git que se supone que asume parte de lo que git checkout
fue responsable. Vea los aspectos más destacados de los cambios en el blog de Github .
El comportamiento predeterminado de este comando es restaurar el estado de un árbol de trabajo con el contenido proveniente del source
parámetro (que en su caso será un hash de confirmación).
Asumiendo que el hash commit es abcdef
el comando se vería así:
git restore --source=abcdef file_name
que (por defecto) lo coloca en el árbol de trabajo. Si desea colocar el cambio directamente en el índice para que se pueda confirmar de inmediato:
git restore --source=abcdef --worktree --staged file_name
o con nombres cortos de opciones:
git restore -s=abcdef -W -S file_name