¿Cuál es la diferencia entre git reflog y log?

Resuelto Noich asked hace 11 años • 7 respuestas

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.

Noich avatar Jul 25 '13 19:07 Noich
Aceptado

git logmuestra 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 reflogno 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 --hardvolver a esa referencia para restaurar su estado anterior. Recuerde, los árbitros implican no solo el compromiso sino toda la historia detrás de él.

ben_h avatar Jul 25 '2013 14:07 ben_h
  • git logmuestra el registro de confirmación accesible desde las referencias (cabezales, etiquetas, controles remotos)
  • git refloges 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 reflogexpirar 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>.

red de seguridad

git refloga 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 usagit reflog "

mantenga la calma

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.

VonC avatar Jul 25 '2013 13:07 VonC