La página de manual dice que log muestra los registros de confirmación y reflog gestiona la información de reflog. ¿Qué es exactamente la información de registro y qué tiene que no tenga el registro? El registro parece mucho más detallado.
fuente
La página de manual dice que log muestra los registros de confirmación y reflog gestiona la información de reflog. ¿Qué es exactamente la información de registro y qué tiene que no tenga el registro? El registro parece mucho más detallado.
git log
muestra la CABEZA actual y su ascendencia. Es decir, imprime los puntos de confirmación HEAD, luego su padre, su padre, etc. Atraviesa los ancestros del repositorio, buscando recursivamente el padre de cada commit.
(En la práctica, algunos commits tienen más de un padre. Para ver un registro más representativo, use 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 los commits que HEAD ha señalado: es el historial de deshacer para su repositorio. El reflog no es parte del repositorio en sí (se almacena por separado para los commits mismos) y no se incluye en empujes, 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 una confirmación anterior, o vuelve a emitir incorrectamente, o cualquier otra operación que visualmente "elimine" las confirmaciones, puede usar el registro de nuevo 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 commit sino toda la historia detrás de él.
.git/logs/refs/<branch>
entradas tienen el formato<old_rev> <new_rev> [...] <timestamp> [...]
. Puede intentar concatenar y ordenar por marca de tiempo. Sin embargo, algunas líneasnew_rev
pueden no coincidir con la siguienteold_rev
, en cuyo caso sospecho que el registro no será válido. Entonces podría intentar insertar entradas falsas para "arreglar" la secuencia, pero me parece demasiado complicado.git log
muestra el registro de confirmación accesible desde las referencias (cabezas, 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 poda 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 hace referencia esa rama.Ver
git config
:git reflog
es a menudo referencia como " su red de seguridad "En caso de problemas, el consejo general, cuando git log no le muestra lo que está buscando, es:
Nuevamente, reflog es una grabación local de su SHA1.
A diferencia de
git log
: si empuja su repositorio a un repositorio ascendente , verá lo mismogit log
, pero no necesariamente lo mismogit reflog
.fuente
Aquí está la explicación del
reflog
libro Pro Git :El
reflog
comando también se puede utilizar para eliminar entradas o caducar entradas del registro que son demasiado antiguas. De la documentación oficial de Linux Kernel Git parareflog
:fuente
git log
proporciona la misma información? Lo siento si parece obvio, soy muy nuevo en GIT y me gustaría obtener algunos conceptos básicos justo antes de mi primer OMG.HEAD
puntero), y a qué compromisos han estado apuntando. ¿Tiene sentido? En una nota al margen,log
también puede mostrarle información de registro, pero debe pasar un indicador de opción especial como argumento para ello--walk-reflogs
.También tenía curiosidad sobre esto y solo quiero elaborar y resumir un poco:
git log
muestra un historial de todos tus commits para la rama en la que estás. Pague una rama diferente y verá un historial de confirmación diferente. Si desea ver su historial de confirmación para todas las ramas, escribagit log --all
.git reflog
muestra un registro de tus referencias como dijo Cupcake. Hay una entrada cada vez que se realiza una confirmación o un pago. Intente alternar entre dos ramas varias veces utilizandogit checkout
y ejecutargit reflog
después de cada pago. Verá que la entrada superior se actualiza cada vez como una entrada de "pago". No ve este tipo de entradas engit log
.Referencias: http://www.lornajane.net/posts/2014/git-log-all-branches
fuente
Me gusta pensar que la diferencia entre git log y reflog es la diferencia entre un registro privado y un registro público.
Privado vs público
Con el git reflog, realiza un seguimiento de todo lo que ha hecho localmente. ¿Te comprometiste? El registro lo sigue. ¿Hiciste un restablecimiento completo? El registro lo sigue. ¿ Modificó una confirmación? ? El registro lo sigue. Todo lo que has hecho localmente, hay una entrada en el reflog.
Esto no es cierto para el registro. Si modifica una confirmación, el registro solo muestra la nueva confirmación. Si reinicia y omite algunas confirmaciones en su historial, las confirmaciones que omitió no aparecerán en el registro. Cuando envías tus cambios a otro desarrollador o a GitHub o algo así, solo aparecerá el contenido rastreado en el registro. Para otro desarrollador, parecerá que los reinicios nunca ocurrieron o las reparaciones nunca sucedieron.
El registro está pulido. El reflog es lapidario.
Entonces sí, me gusta la analogía 'privado vs público'. O tal vez un mejor registro vs reflog analogía es 'pulido vs lapidario'. El reflog muestra todas sus pruebas y errores. El registro solo muestra una versión limpia y pulida de su historial de trabajo.
Echa un vistazo a esta imagen para enfatizar el punto. Se han producido una serie de enmiendas y restablecimientos desde que se inicializó el repositorio. El reflog lo muestra todo. Sin embargo, el comando de registro hace que parezca que solo ha habido una confirmación contra el repositorio:
Volver a la idea de la "red de seguridad"
Además, dado que el registro de registro realiza un seguimiento de las cosas que modificó y confirma que restablece , le permite volver y encontrar esas confirmaciones porque le dará los identificadores de confirmación. Asumiendo que su repositorio no ha sido purgado de las confirmaciones antiguas, eso le permite resucitar elementos que ya no están visibles en el registro. Así es como el reflog a veces termina salvando la piel de alguien cuando necesita recuperar algo que pensó que perdió inadvertidamente.
fuente
En realidad, reflog es un alias para
entonces la respuesta debería ser: es un caso específico.
fuente
git log
,-g
es la forma abreviada de--walk-reflogs
. Entonces, eso no explica nada.