Git reflogs record when the tips of branches and other references were updated in the local repository and also maintains the branches/tags for log history that was either created locally or checked out. Reflogs are useful in various Git commands, to specify the old value of a reference. It can be used for recovery purpose. For recovery purpose, we need to either create it locally or can checkout from remote repository to store reference logs. Reflogs command shows commit snapshot of when the branch was created, renamed or commit details maintained by Git. Let's take an example where we have HEAD@ {5} which refer to "where HEAD used to be five moves ago", master @{two.weeks.ago} which refer to "where master used to point to two weeks ago in this local repository". Now, Git log will show the current HEAD and all ancestral details of its parent. Basically, it will print where the commit HEAD pointing to, then its parent, then its parents and so on. On other side, Git reflog doesn't show HEAD's ancestry details. Git  reflog is an ordered list which shows   the commits that HEAD has pointed to: it's undo history for our repository.