[git undo operation] git reset explicación detallada

Muchas veces, Gitdespués de git commit enviar el código, es posible encontrar que el contenido commitde es incorrecto, entonces puede usar git reset para retirarse sin agregar commit_id

Modo operativo

git resetHay tres modos de trabajo, a saber --soft, –mixed(modo predeterminado) y --hard.

  • git reset --soft: Solo se mueve el Headpuntero , y el contenido del área de trabajo y del área de almacenamiento temporal no se cambiará, como se muestra en la siguiente figura: solo HEADse modifica el puntero
    inserte la descripción de la imagen aquí
  • git reset --mixed: es git resetel parámetro predeterminado de , al mover HEADel puntero cambiará el contenido del área de almacenamiento temporal, pero no cambiará el área de trabajo, como se muestra en la siguiente figura: HEADtanto el contenido del puntero como el del área de almacenamiento temporal se modifican
    104_git deshacer modificación revertir versión git reset.png
  • git reset --hard: Los contenidos del HEADpuntero , el área de trabajo y el área de almacenamiento temporal se modifican, como se muestra en la siguiente figura: HEAD los contenidos del puntero, el área de trabajo y el área de almacenamiento temporal se modifican
    inserte la descripción de la imagen aquí

Escenas a utilizar

  • –hard
  1. Cuando desee abandonar todos los cambios locales actuales, es decir, eliminar todos los archivos git adden el área de almacenamiento temporal y los archivos en el área de trabajo, puede ejecutar git reset --hard HEADpara restaurar a la fuerza el contenido y el estado de las carpetas administradas por git;

  2. Deseche todo después del nodo de destino commit(puede sentir que hay un problema con commitla confirmación ).

  • –soft
  1. resetEl cambio de diferencia establecido indexentre el nodo original y el nodo se colocará en el área de almacenamiento temporal ( Staged files), por lo que si no hemos cambiado ningún archivo en el directorio de trabajo antes y no hemos addingresado al área de almacenamiento temporal, luego reset --softde usar , podemos git commitejecutar indexel área de almacenamiento temporal El contenido de se envía Repositorya .

    ¿Por qué tiene que ser así? El escenario de uso para esto es: si queremos fusionar commitregistros (tal vez envíos frecuentes en etapas, es decir, al desarrollar una función, al cambiar o agregar un archivo commit, De esta manera, una función completa puede tener muchos commitpuntos . En este momento, si necesita commiintegrar estos t en commituno ), puede considerar usar reset --softpara que commitel diagrama de línea de evolución más claro. Con todo, puede usar --softel commitnodo Merge .

–mixed(por defecto)

  1. reset --mixedDespués de usar , podemos ejecutar directamente git addpara agregar el contenido de estos archivos modificados al área indexde almacenamiento temporal y luego ejecutar git commitpara enviar el contenido en Indexel área de almacenamiento temporal Repositorya , que también puede lograr el efecto de fusionar el nodo de confirmación (combinado con el --soft arriba El nodo de confirmación es casi el mismo, pero hay más operaciones git add para agregar al área de almacenamiento temporal);

  2. Para eliminar todos los archivos en Indexel área de almacenamiento temporal que están listos para enviarse ( Staged files), podemos ejecutar git reset HEADpara obtener Unstagetodos los archivos que se han enumerado en Indexel área de almacenamiento temporal para enviarse. (A veces encuentra que agrega el archivo incorrecto al área de almacenamiento temporal, puede usar el comando).

  3. commitEnvíe algunos códigos de error, o también se commitcargan , y no desea modificar el error commit(porque habrá un commitpunto ), puede retroceder commital punto correcto y luego todas resetlas diferencias entre el nodo original y se devolverá el nodo. Si hay un archivo innecesario en el directorio de trabajo, se puede eliminar directamente y estará bien después commitde cargarlo .

Resumen de escenarios de archivos de reversión de Git

Aún no git add después de la modificación : use git checkout para retroceder:
git checkout .
use los archivos en el área de almacenamiento temporal para sobrescribir el área de trabajo, por lo que no es válido ejecutar este comando git add .después de . git checkout .y git add .son un par de antónimos.

La confirmación de git add no se ha enviado al área de almacenamiento temporal mediante
la confirmación y, antes de eso, use y revierta:git addcommitgit resetgit checkout

git reset  # 先用 Head 指针覆盖当前的暂存区内容
git checkout . # 再用暂存区内容覆盖工作区内容

O utilice el cabezal directamente para sobrescribir el área de almacenamiento temporal actual y el área de trabajo.

git reset --hard

Ya git commit aún no tiene git push
use git reset para retroceder:

git reset --hard <last_commit_id>

Cubre depósitos locales, áreas de preparación y espacios de trabajo.

Ya empujo git

git reset --hard <commit_id>

Forzar la confirmación del número de versión actual:git push origin <远端分支名称> --force

Se agregaron incorrectamente archivos grandes al caché

git reset

Retirar la adición.

Supongo que te gusta

Origin blog.csdn.net/qq_38987146/article/details/125149888
Recomendado
Clasificación