¿Cuál es la diferencia entre git reflog y log?
La página de manual dice que log muestra los registros de confirmación y reflog administra la información de reflog. ¿Qué es exactamente la información de reflog y qué tiene que no tenga el registro? El registro parece mucho más detallado.
git log
muestra el HEAD actual y su ascendencia. Es decir, imprime la confirmación a la que apunta HEAD, luego su padre, su padre, etc. Recorre la ascendencia del repositorio, buscando recursivamente el padre de cada confirmación.
(En la práctica, algunas confirmaciones tienen más de un padre. Para ver un registro más representativo, utilice un comando como git log --oneline --graph --decorate
.)
git reflog
no atraviesa la ascendencia de HEAD en absoluto. El reflog es una lista ordenada de las confirmaciones que HEAD ha señalado: es el historial de deshacer de su repositorio. El reflog no es parte del repositorio en sí (se almacena por separado de las confirmaciones mismas) y no se incluye en envíos, recuperaciones o clones; es puramente local.
Aparte: comprender el reflog significa que realmente no puede perder datos de su repositorio una vez que se ha confirmado. Si accidentalmente restablece a una confirmación anterior, o rebase incorrectamente, o cualquier otra operación que "elimine" visualmente las confirmaciones, puede usar el reflog para ver dónde estaba antes y git reset --hard
volver a esa referencia para restaurar su estado anterior. Recuerde, los árbitros implican no solo el compromiso sino toda la historia detrás de él.
git log
muestra el registro de confirmación accesible desde las referencias (cabezales, etiquetas, controles remotos)git reflog
es un registro de todas las confirmaciones a las que se hace referencia en su repositorio en cualquier momento.
Es por eso que git reflog
(una grabación local que se elimina después de 90 días de forma predeterminada) se usa cuando realiza una operación "destructiva" (como eliminar una rama), para recuperar el SHA1 al que hizo referencia esa rama.
Ver git config
:
gc.reflogexpire
gc.<pattern>.reflogexpire
git reflog
expirar elimina las entradas de reflog anteriores a esta hora; El plazo predeterminado es 90 días.
Con "<pattern>
" (por ejemplo, "refs/stash
") en el medio, la configuración se aplica solo a las referencias que coinciden con el<pattern>
.
git reflog
a menudo se hace referencia como " su red de seguridad "
En caso de problemas, el consejo general, cuando git log no muestra lo que estás buscando, es:
" Mantén la calma y usa
git reflog
"
Nuevamente, reflog es una grabación local de su SHA1.
A diferencia de git log
: si envía su repositorio a un repositorio ascendente , verá lo mismo git log
, pero no necesariamente lo mismo git reflog
.