Pregunta ¿Cómo retrotraer (reiniciar) un repositorio de Git a una confirmación particular? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Cloné un repositorio de Git y luego intenté retrotraerlo a un compromiso particular al principio del proceso de desarrollo. Todo lo que se agregó al repositorio después de ese punto no es importante para mí, así que quiero omitir todos los cambios posteriores de mi código fuente local.

Sin embargo, cuando intento retroceder en la herramienta GUI no actualiza mi sistema de archivos local, siempre termino con el último código fuente para el proyecto.

¿Cuál es la forma correcta de obtener el origen de un repositorio a partir de un compromiso particular en el historial del proyecto y omitir todas las actualizaciones posteriores?


631
2017-10-24 04:22


origen


Respuestas:


git reset --hard <tag/branch/commit id>

Notas:

  • git reset sin el --hard opción restablece el historial de confirmaciones, pero no los archivos. Con el --hard opción los archivos en el árbol de trabajo también se restablecen. (usuario acreditado)

  • Si desea confirmar ese estado para que el repositorio remoto también apunte al compromiso retrotraído, haga lo siguiente: git push <reponame> -f (usuario acreditado)


983
2017-10-24 04:24



Actualizar:

Debido a los cambios en la creación y el envío de rastreos de seguimiento, ya no recomiendo cambiar el nombre de las ramas. Esto es lo que recomiendo ahora:

Haga una copia de la rama en su estado actual:

git branch crazyexperiment

(Los git branch <name> comando lo dejará con su rama actual todavía desprotegido).

Restablezca su rama actual a la confirmación deseada con git reset:

git reset --hard c2e7af2b51

(Reemplazar c2e7af2b51 con el compromiso al que quieres volver.)

Cuando decida que su rama de experimento loco no contiene nada útil, puede eliminarlo con:

git branch -D crazyexperiment

Siempre es bueno cuando comienzas con los comandos git que modifican la historia (restablecer, rebasear) para crear ramas de respaldo antes de ejecutarlas. Eventualmente, una vez que se sienta cómodo, no lo encontrará necesario. Si modifica su historial de una manera que no desea y no ha creado una rama de respaldo, investigue git reflog. Git mantiene los compromisos por bastante tiempo, incluso si no hay ramas o etiquetas que los señalen.

Respuesta original:

Una forma un poco menos aterradora de hacer esto que la git reset --hard método es crear una nueva rama. Supongamos que estás en el master rama y el compromiso que desea volver a es c2e7af2b51.

Cambie el nombre de su rama maestra actual:

git branch -m crazyexperiment

Verifica tu buena comisión:

git checkout c2e7af2b51

Haga su nueva rama principal aquí:

git checkout -b master

Ahora todavía tiene su loco experimento si desea verlo más tarde, pero su rama principal está de vuelta en su último punto conocido, listo para ser agregado. Si realmente quieres descartar tu experimento, puedes usar:

git branch -D crazyexperiment

372
2017-10-26 14:49



Para aquellos con un git gui doblado, también puedes usar gitk.

Haga clic derecho en la confirmación a la que desea regresar y seleccione "Restablecer rama principal aquí". A continuación, elija difícil del siguiente menú.


12
2018-04-04 13:57



Cuando dices la 'Herramienta GUI', asumo que estás usando Git para Windows.

IMPORTANTE, recomiendo crear una nueva sucursal para hacer esto si aún no lo ha hecho. De esa manera, tu maestro puede permanecer igual mientras pruebas tus cambios.

Con la GUI, debe "retrotraer este compromiso" como lo hizo con el historial a la derecha de su vista. Entonces notará que tiene todos los archivos no deseados como cambios para confirmar a la izquierda. Ahora debe hacer clic con el botón derecho sobre el título gris sobre todos los archivos no enviados y seleccionar 'ignorar cambios'. Esto restablecerá sus archivos a cómo estaban en esta versión.


1
2017-10-14 14:33