New users find Git difficult because it has extensive hidden state. The effect of "git commit/diff/reset" is completely dependent on the invisible state of the stage/branch/history DAG.
A competent user always knows what "git status" will output. But novices don't even understand which hidden state they must keep track of.
One thing I've found helpful is adding git status information to my command prompt. (For this, I use oh-my-zsh.) I always know what branch I'm on, and whether it's dirty or not.
I still need to 'git status' (which I've aliased to 'gs') sometimes but more frequently I get what I need without it.
A competent user always knows what "git status" will output. But novices don't even understand which hidden state they must keep track of.