usar tag restaurar regresar recuperar hacer conectar con como cambios git git-log git-reflog

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



regresar cambios en git (4)

Aquí está la explicación del reflog del libro Pro Git :

Una de las cosas que hace Git en segundo plano mientras trabajas es mantener un reflog, un registro de dónde han estado tus referencias de HEAD y de sucursal durante los últimos meses.

Puedes ver tu reflog usando git reflog :

$ git reflog 734713b... HEAD@{0}: commit: fixed refs handling, added gc auto, updated d921970... HEAD@{1}: merge phedders/rdocs: Merge made by recursive. 1c002dd... HEAD@{2}: commit: added some blame and merge stuff 1c36188... HEAD@{3}: rebase -i (squash): updating HEAD 95df984... HEAD@{4}: commit: # This is a combination of two commits. 1c36188... HEAD@{5}: rebase -i (squash): updating HEAD 7e05da5... HEAD@{6}: rebase -i (pick): updating HEAD

Cada vez que se actualice su sugerencia de sucursal por algún motivo, Git almacena esa información en este historial temporal. Y también puedes especificar confirmaciones más antiguas con estos datos.

El comando de reflog también se puede usar para eliminar entradas o caducar entradas del reflog que son demasiado antiguas. De la documentación oficial de Linux Kernel Git para el reflog :

El expire subcomando se utiliza para eliminar entradas de reflog anteriores.

Para eliminar entradas individuales del reflog, utilice el subcomando delete y especifique la entrada exacta (por ejemplo, git reflog delete master@{2} ).

La página man dice que el registro muestra los registros de commit y que el reflog gestiona la información de reflog. ¿Qué es exactamente la información de reflog y qué tiene que el log no tiene? El registro parece mucho más detallado.


Tenía curiosidad acerca de esto también y solo quiero elaborar y resumir un poco:

  1. git log muestra un historial de todas tus confirmaciones para la sucursal en la que te encuentras. Verifica una sucursal diferente y verás un historial de confirmaciones diferente. Si desea ver que confirme el historial de todas las ramas, escriba git log --all .

  2. git reflog muestra un registro de tus referencias como dijo Cupcake. Hay una entrada cada vez que se realiza un commit o un checkout. Intente alternar entre dos ramas varias veces usando el git checkout y ejecute git reflog después de cada pago. Verás que la entrada superior se actualiza cada vez como una entrada de "pago". No ve este tipo de entradas en el git log .

Referencias: http://www.lornajane.net/posts/2014/git-log-all-branches


git log muestra el HEAD actual y su ascendencia. Es decir, imprime los puntos HEAD de confirmación, luego su padre, su padre, y así sucesivamente. Atraviesa la ascendencia del repositorio, al buscar 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 en absoluto el ancestro de HEAD. El reflog es una lista ordenada de los commits que HEAD ha señalado: es el historial de deshacer de su repositorio. El reflog no es parte del repositorio en sí mismo (se almacena por separado en los commits) y no está incluido en push, fetches o clones; es puramente local.

Aparte: entender el reflog significa que no se pueden perder los datos de su repositorio una vez que se haya comprometido. Si restableces accidentalmente una confirmación más antigua, o la rebase incorrectamente, o cualquier otra operación que "remueva" visualmente las confirmaciones, puedes usar el reflog para ver dónde estabas antes y git reset --hard a ese ref para restaurar tu estado anterior . Recuerde, las referencias implican no solo el compromiso sino toda la historia detrás de él.


  • git log muestra el registro de confirmación accesible desde los refs (encabezados, etiquetas, controles remotos)
  • git reflog es un registro de todas las confirmaciones que son o fueron referenciadas 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 por defecto) se usa cuando se realiza una operación "destructiva" (como eliminar una rama), para recuperar el SHA1 al que se refirió esa rama.
Ver git config :

gc.reflogexpire gc.<pattern>.reflogexpire

git reflog expire quita las entradas de reflog anteriores a esta vez; predeterminado a 90 días.
Con " <pattern> " (por ejemplo, " refs/stash ") en el medio, la configuración se aplica solo a los refs que coinciden con el <pattern> .

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:

" Mantén la calma y usa git reflog "

Nuevamente, el reflog es una grabación local de su SHA1.
A diferencia git log : si envía su repositorio a un repositorio en sentido ascendente , verá el mismo git log , pero no necesariamente el mismo git reflog .