A mucher better explanation of git interals: https://git-scm.com/book/en/v2/Git-Internals-Git-Objects It is surprisingly simple and efficient. I am starting to think this Linus guy knows what he is doing.
He offloaded the complexity to its users! :-) If the command and option names had just been sensible, it would be a lot easier to learn and use. Half the usability difficulty, maybe more, is just this.
Holy shit, yes.
`git branch` in gitspeak really means `git branch list` in human-readable CLI
But `git branch ${NAME}` does not mean `git branch list ${NAME}`, instead it means `git branch create ${NAME}`
There is no `git branch switch ${NAME}` but instead it's `git checkout ${NAME}`
There is no `git branch log` – that would be `git log`, whereas if you want what should be `git log` what you really want is `git log --all`
Don't get me started on whether modified files are added, staged, or indexed...