Después de la última confirmación, modifiqué un montón de archivos en mi copia de trabajo, pero quiero deshacer los cambios en uno de esos archivos, como en restablecerlo al mismo estado que la confirmación más reciente.
Sin embargo, solo quiero deshacer los cambios de la copia de trabajo solo de ese archivo, nada más con él.
¿Cómo puedo hacer eso?
git reset HEAD <filename> ; git checkout -- <filename>
HEAD^^
2 confirmaciones de la más reciente oHEAD^^^
3 confirmaciones de vuelta. También puede usarHEAD~2
, oHEAD~3
, que se vuelve más conveniente si desea volver más confirmaciones, mientras queHEAD^2
significa "el segundo padre de esta confirmación"; debido a las confirmaciones de fusión, una confirmación puede tener más de una confirmación previa, por lo que conHEAD^
un número se selecciona cuál de esos padres, mientras que conHEAD~
un número siempre se selecciona el primer elemento primario pero ese número de confirmaciones se devuelve. Vergit help rev-parse
para más detalles.Solo usa
Esto reemplazará el nombre del archivo con la última versión de la rama actual.
ADVERTENCIA: sus cambios serán descartados, no se guarda ninguna copia de seguridad.
fuente
git checkout x
x es un nombre de rama así como un nombre de archivo, no estoy seguro de cuál es el comportamiento predeterminado, pero creo que git asumirá que desea cambiar a la rama x. Cuando usas--
estás diciendo que lo que sigue son los nombres de los archivos.--
. Si bien sigue siendo correcto, como señala @hasen, si existe una ambigüedad entre el nombre del archivo y los nombres de las ramas, ¡aquí puede terminar con un comportamiento muy indeseable!--
, agradable y fácil. Cuando nombras ramas usando nombres de archivos, debe haber un mal pensamiento en alguna parte ...Utilicé esto hoy porque me di cuenta de que mi favicon había sido sobrescrito hace algunos commits cuando actualicé a drupal 6.10, así que tuve que recuperarlo. Aquí esta lo que hice:
fuente
git log --oneline <filename>
le dará un registro más compacto y solo incluirá cambios en el archivo específicogit reflog <filename>
Si su archivo ya está preparado (sucede cuando hace un git add, etc. después de editar el archivo) para desestabilizar sus cambios.
Utilizar
Entonces
Si aún no está en escena, solo use
fuente
Si solo desea deshacer los cambios del commit anterior en ese archivo, puede intentar esto:
Esto revisará el archivo como estaba antes de la última confirmación. Si desea regresar algunas confirmaciones más, use la
branchname~n
notación.fuente
branchname^
He hecho a través de git bash:
(use "git checkout -- <file>..." to discard changes in working directory)
fuente
Siempre me confundo con esto, así que aquí hay un caso de prueba recordatorio; Digamos que tenemos este
bash
script para probargit
:En este punto, el cambio no está organizado en la memoria caché, por lo que
git status
es:Si desde este punto, lo hacemos
git checkout
, el resultado es este:Si en cambio lo hacemos
git reset
, el resultado es:Entonces, en este caso, si los cambios no están organizados,
git reset
no hay diferencia, mientras que losgit checkout
sobrescribe.Ahora, digamos que el último cambio del script anterior es en etapas / en caché, es decir, también lo hicimos
git add b.txt
al final.En este caso,
git status
en este punto es:Si desde este punto, lo hacemos
git checkout
, el resultado es este:Si en cambio lo hacemos
git reset
, el resultado es:Por lo tanto, en este caso, si los cambios se organizan,
git reset
básicamente se convertirán en cambios no organizados, mientrasgit checkout
que los sobrescribirá por completo.fuente
Esta respuesta es para el comando necesario para deshacer los cambios locales que se encuentran en múltiples archivos específicos en la misma o múltiples carpetas (o directorios). Esta respuesta aborda específicamente la pregunta en la que un usuario tiene más de un archivo pero no quiere deshacer todos los cambios locales:
Para múltiples archivos en la misma carpeta:
El asterisco en lo anterior hace el truco de deshacer todos los archivos en esa ubicación bajo nombre1 / nombre2.
Nota: nombre1, nombre2, nombreA, subcarpeta: todos estos nombres de carpeta de ejemplo indican la carpeta o paquete donde pueden residir los archivos en cuestión.
fuente
Restauro mis archivos usando la identificación SHA, lo que hago es
git checkout <sha hash id> <file name>
fuente
Para mí solo este funcionó
fuente
Si aún no ha empujado o compartido su compromiso:
fuente
Si ya está confirmado, puede revertir el cambio para el archivo y confirmar nuevamente, luego aplastar la nueva confirmación con la última confirmación.
fuente
No sé por qué, pero cuando intento ingresar mi código, aparece como una imagen.
fuente