Pregunta ¿Restablecer o revertir un archivo específico a una revisión específica usando Git?


Realicé algunos cambios en un archivo que se ha comprometido varias veces como parte de un grupo de archivos, pero ahora quiero restablecer / revertir los cambios en él a una versión anterior.

He hecho un git log junto con un git diff para encontrar la revisión que necesito, pero no tengo idea de cómo recuperar el archivo a su estado anterior en el pasado.


3443
2017-10-18 23:34


origen


Respuestas:


Suponiendo que el hash de la confirmación que desea es c5f567:

git checkout c5f567 -- file1/to/restore file2/to/restore

los git pago y envío la página man da más información.

Si desea volver a la confirmación antes c5f567, adjuntar ~1 (funciona con cualquier número):

git checkout c5f567~1 -- file1/to/restore file2/to/restore

Como nota al margen, siempre me he sentido incómodo con este comando porque se usa tanto para cosas comunes (cambiando entre sucursales) como para cosas inusuales y destructivas (descartando cambios en el directorio de trabajo).


4654
2017-10-18 23:39



Puede revisar rápidamente los cambios realizados en un archivo usando el comando diff:

git diff <commit hash> <filename>

Luego, para revertir un archivo específico a esa confirmación, use el comando de reinicio:

git reset <commit hash> <filename>

Es posible que necesite usar el --hard opción si tiene modificaciones locales.

Un buen flujo de trabajo para gestionar waypoints es usar etiquetas para marcar puntos en su línea de tiempo. No puedo entender tu última oración, pero lo que puedes desear es divergir de una rama de un punto anterior en el tiempo. Para hacer esto, use el útil comando de pago:

git checkout <commit hash>
git checkout -b <new branch name>

A continuación, puede volver a establecer la base en su línea principal cuando esté listo para combinar esos cambios:

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>

508
2017-12-17 06:59



Puedes usar cualquier referencia a un commit de git, incluido el SHA-1 si es más conveniente. El punto es que el comando se ve así:

git checkout [commit-ref] -- [filename]


305
2018-04-07 21:48



git checkout -- foo

Eso reiniciará foo a HEAD. Tú también puedes:

git checkout HEAD^ foo

para una revisión posterior, etc.


243
2017-08-29 20:56



Y para volver a la última versión confirmada, que se necesita con mayor frecuencia, puede usar este comando más simple.

git checkout HEAD file/to/restore

106
2018-01-14 06:15



Tuve el mismo problema ahora y encontré esta respuesta más fácil de entender (commit-ref es el valor SHA del cambio en el registro al que desea volver):

git checkout [commit-ref] [filename]

Esto colocará esa versión anterior en su directorio de trabajo y desde allí puede confirmarla si lo desea.


100
2018-05-27 17:52



Si sabe cuántos commits necesita volver, puede usar:

git checkout master~5 image.png

Esto supone que estás en el master rama, y ​​la versión que desea es 5 confirmaciones.


85
2018-04-07 14:03



Creo que lo he encontrado .... de http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html

Algunas veces solo quieres regresar y olvidarte de cada cambio más allá de cierto punto porque están todos equivocados.

Empezar con:

$ git log

que muestra una lista de confirmaciones recientes y sus hashes SHA1.

Luego, escribe:

$ git reset --hard SHA1_HASH

para restaurar el estado de una confirmación determinada y borrar todas las confirmaciones más recientes del registro de forma permanente.


75
2017-12-17 06:53



Esto funcionó para mí:

git checkout <commit hash> file

Luego comprometa el cambio:

git commit -a

59
2017-08-25 22:12