Solución:
Estos tres comandos tienen propósitos completamente diferentes. No son ni remotamente similares.
git revert
Este comando crea una nueva confirmación que deshace los cambios de una confirmación anterior. Este comando agrega un nuevo historial al proyecto (no modifica el historial existente).
git checkout
Este comando extrae el contenido del repositorio y lo coloca en su árbol de trabajo. También puede tener otros efectos, dependiendo de cómo se invocó el comando. Por ejemplo, también puede cambiar la rama en la que está trabajando actualmente. Este comando no realiza ningún cambio en el historial.
git reset
Este comando es un poco más complicado. En realidad, hace un par de cosas diferentes dependiendo de cómo se invoca. Modifica el índice (la denominada “zona de preparación”). O cambia a cuál de las confirmaciones apunta una cabeza de rama. Este comando puede alterar el historial existente (cambiando el compromiso al que hace referencia una rama).
Usando estos comandos
Si se ha realizado una confirmación en algún lugar del historial del proyecto y luego decide que la confirmación es incorrecta y no debería haberse realizado, entonces git revert
es la herramienta para el trabajo. Deshacerá los cambios introducidos por la mala confirmación, registrando el “deshacer” en el historial.
Si ha modificado un archivo en su árbol de trabajo, pero no ha confirmado el cambio, puede usar git checkout
para obtener una copia nueva del repositorio del archivo.
Si ha realizado una confirmación, pero no la ha compartido con nadie más y decide que no la quiere, puede usar git reset
para reescribir el historial para que parezca que nunca hiciste ese compromiso.
Estos son solo algunos de los posibles escenarios de uso. Hay otros comandos que pueden ser útiles en algunas situaciones, y los tres comandos anteriores también tienen otros usos.
Digamos que tuviste confirmaciones:
C
B
A
git revert B
, creará una confirmación que deshaga los cambios en B
.
git revert A
, creará una confirmación que deshaga los cambios en A
, pero no tocará los cambios en B
Tenga en cuenta que si los cambios en B
dependen de los cambios en A
, la reversión de A
no es posible.
git reset --soft A
, cambiará el historial de confirmaciones y el repositorio; El directorio de ensayo y trabajo todavía estará en el estado de C
.
git reset --mixed A
, cambiará el historial de confirmaciones, el repositorio y la preparación; El directorio de trabajo seguirá estando en el estado de C
.
git reset --hard A
, cambiará el historial de confirmaciones, el repositorio, la preparación y el directorio de trabajo; volverás al estado de A
completamente.
-
git revert
se usa para deshacer una confirmación anterior. En git, no puedes alterar o borrar una confirmación anterior. (En realidad, puede, pero puede causar problemas). Entonces, en lugar de editar la confirmación anterior, revert introduce una nueva confirmación que revierte una anterior. -
git reset
se utiliza para deshacer cambios en su directorio de trabajo que aún no se han confirmado. -
git checkout
se usa para copiar un archivo de alguna otra confirmación a su árbol de trabajo actual. No confirma automáticamente el archivo.