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.
Si rompiste el árbol pero no entregaste el código, puedes usar git reset
, y si solo quieres restaurar un archivo, puedes usar git checkout
.
Si rompiste el árbol y cometiste el código, puedes usar git revert HEAD
.
http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html
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.