Understanding that in git 'branches' are not really the branches but merely post-its that can trivially moved between the 'real' branches on the tree of commits really opened my eyes. Along with the use of visual tools like https://github.com/gitx/gitx, https://github.com/FredrikNoren/ungit, https://github.com/jonas/tig and aliases like `log --oneline --decorate -50 --all --graph --remotes`.
It really changes Git from a bunch of vague commands to a toolkit that you can use to apply the changes you desire on the database and worktree.
But even then I still get confused as the concepts of Git are not well translated into the commands, the various functions of reset and checkout. I think it is mentioned often before on HN but http://gitless.com/ is an good approach to create a new API/concepts on top of the same internals.
It really changes Git from a bunch of vague commands to a toolkit that you can use to apply the changes you desire on the database and worktree.
But even then I still get confused as the concepts of Git are not well translated into the commands, the various functions of reset and checkout. I think it is mentioned often before on HN but http://gitless.com/ is an good approach to create a new API/concepts on top of the same internals.