reflog and clean are the bottom-of-the-toolbox tools
Two commands you should never need every day, but should know cold for the day you do. git reflog is Git's local memory of every move HEAD has made — every commit, reset, rebase, switch — for the last 90 days by default. It is how you find work you "lost." git clean removes untracked files from the working tree, the answer to "what is all this junk after a build?" and "I want a truly fresh checkout." Both are local-only; both can save you from disaster or cause one if used carelessly.
The reflog story usually goes: panic moment, "I just ran git reset --hard and lost a day of work." Calm response: git reflog. The output is a numbered list of every recent HEAD movement. HEAD@{0} is the current state, HEAD@{1} is one move ago, and so on. Find the entry that looks like the commit you lost, then anchor it: git switch -c rescue HEAD@{3} or git reset --hard HEAD@{3}. Crisis averted.
Reflog has individual logs per ref, not just HEAD. git reflog show feature/x tracks moves of that branch specifically. git reflog --date=relative shows times like "2 hours ago" instead of full timestamps. The 90-day default is configurable but usually fine — once entries fall off, the underlying commits become candidates for garbage collection and may be unrecoverable.
git clean deletes untracked files. Default refuses to do anything; you must pass -n (dry run) or -f (force). Combined with -d for directories and -x for ignored-but-still-on-disk files, it can wipe the working tree to a state matching git ls-files. Use git clean -ndx first, always, to see what would be deleted. Use git clean -fdx only after reading the dry-run output and confirming you really want it gone — there is no recovery for files Git was not tracking.