Muchas veces, Git
después de git commit
enviar el código, es posible encontrar que el contenido commit
de es incorrecto, entonces puede usar git reset para retirarse sin agregar commit_id
Modo operativo
git reset
Hay tres modos de trabajo, a saber --soft
, –mixed
(modo predeterminado) y --hard
.
git reset --soft
: Solo se mueve elHead
puntero , y el contenido del área de trabajo y del área de almacenamiento temporal no se cambiará, como se muestra en la siguiente figura: soloHEAD
se modifica el puntero
git reset --mixed
: esgit reset
el parámetro predeterminado de , al moverHEAD
el puntero cambiará el contenido del área de almacenamiento temporal, pero no cambiará el área de trabajo, como se muestra en la siguiente figura:HEAD
tanto el contenido del puntero como el del área de almacenamiento temporal se modifican
git reset --hard
: Los contenidos delHEAD
puntero , 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
Escenas a utilizar
–hard
-
Cuando desee abandonar todos los cambios locales actuales, es decir, eliminar todos los archivos
git add
en el área de almacenamiento temporal y los archivos en el área de trabajo, puede ejecutargit reset --hard HEAD
para restaurar a la fuerza el contenido y el estado de las carpetas administradas por git; -
Deseche todo después del nodo de destino
commit
(puede sentir que hay un problema concommit
la confirmación ).
–soft
-
reset
El cambio de diferencia establecidoindex
entre 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 hemosadd
ingresado al área de almacenamiento temporal, luegoreset --soft
de usar , podemosgit commit
ejecutarindex
el área de almacenamiento temporal El contenido de se envíaRepository
a .¿Por qué tiene que ser así? El escenario de uso para esto es: si queremos fusionar
commit
registros (tal vez envíos frecuentes en etapas, es decir, al desarrollar una función, al cambiar o agregar un archivocommit
, De esta manera, una función completa puede tener muchoscommit
puntos . En este momento, si necesitacommi
integrar estos t encommit
uno ), puede considerar usarreset --soft
para quecommit
el diagrama de línea de evolución más claro. Con todo, puede usar--soft
elcommit
nodo Merge .
–mixed
(por defecto)
-
reset --mixed
Después de usar , podemos ejecutar directamentegit add
para agregar el contenido de estos archivos modificados al áreaindex
de almacenamiento temporal y luego ejecutargit commit
para enviar el contenido enIndex
el área de almacenamiento temporalRepository
a , 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 operacionesgit add
para agregar al área de almacenamiento temporal); -
Para eliminar todos los archivos en
Index
el área de almacenamiento temporal que están listos para enviarse (Staged files
), podemos ejecutargit reset HEAD
para obtenerUnstage
todos los archivos que se han enumerado enIndex
el área de almacenamiento temporal para enviarse. (A veces encuentra que agrega el archivo incorrecto al área de almacenamiento temporal, puede usar el comando). -
commit
Envíe algunos códigos de error, o también secommit
cargan , y no desea modificar el errorcommit
(porque habrá uncommit
punto ), puede retrocedercommit
al punto correcto y luego todasreset
las 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éscommit
de 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 add
commit
git reset
git 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.