soft origin hard example changes git git-checkout git-reset git-revert

origin - ¿Cuál es la diferencia entre Git Revert, Checkout y Reset?



git revert local changes (6)

Digamos que has cometido:

C B A

git revert B , creará un commit que deshace los cambios en B

git revert A , creará un commit 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 y repositorio de confirmación; el directorio de puesta en escena y trabajo aún estará en el estado de C

git reset --mixed A , cambiará el historial de commit, el repositorio y la puesta en escena; el directorio de trabajo todavía estará en el estado de C

git reset --hard A , cambiará el historial de confirmaciones, el repositorio, el almacenamiento git reset --hard A y el directorio de trabajo; volverás al estado de A completo.

Estoy intentando aprender a restaurar o retrotraer archivos y proyectos a un estado anterior, y no entiendo la diferencia entre git revert , checkout y reset . ¿Por qué hay 3 comandos diferentes para aparentemente el mismo propósito, y cuándo debería alguien elegir uno sobre el otro?


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 previa. Este comando agrega un nuevo historial al proyecto (no modifica el historial existente).

git checkout

Este comando revisa 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 en qué rama está trabajando actualmente. Este comando no realiza ningún cambio en el historial.

git reset

Este comando es un poco más complicado. De hecho, hace un par de cosas diferentes dependiendo de cómo se invoca. Modifica el índice (el llamado "área de preparación"). O cambia a qué compromiso está apuntando actualmente un ramal. Este comando puede alterar el historial existente (al cambiar la confirmación a la 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 haber sido realizada, entonces git revert es la herramienta para el trabajo. Deshará los cambios introducidos por el commit erróneo, 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 del archivo actualizada desde el repositorio.

Si ha realizado un commit, pero no lo ha compartido con nadie más y decide que no lo quiere, puede usar git reset para reescribir el historial para que parezca como si nunca lo hubiera hecho.

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.



Restablecer: en el nivel de confirmación, restablecer es una forma de mover la punta de una rama a una confirmación diferente. Esto se puede usar para eliminar confirmaciones de la rama actual.

Revertir - Revertir deshace una confirmación al crear una nueva confirmación. Esta es una forma segura de deshacer cambios, ya que no tiene posibilidad de volver a escribir el historial de compromisos. Contraste esto con el restablecimiento de git, que altera el historial de confirmaciones existente. Por esta razón, git revert debe usarse para deshacer cambios en una rama pública, y el restablecimiento de git debe reservarse para deshacer cambios en una rama privada.

Puede ver este enlace: restablecer, verificar y revertir


  • git checkout modifica tu árbol de trabajo,
  • git reset modifica a qué referencia hace referencia la rama en la que se encuentra,
  • git revert agrega un compromiso para deshacer cambios.

  • git revert se usa para deshacer una confirmación previa. En git, no puedes alterar o borrar una confirmación anterior. (En realidad puede, pero puede causar problemas.) Por lo tanto, en lugar de editar el compromiso anterior, revertir introduce un nuevo compromiso que invierte uno anterior.
  • git reset se usa para deshacer los cambios en su directorio de trabajo que aún no se han realizado.
  • 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.