Part of the fault lies with the documentation, and with the way git communicates with the user.<p>For example when I was learning how to use it I routinely had to Google for many tens of minutes to answer questions such as:<p>What the fuck is &quot;fast forward&quot; and why is git displaying that message?<p>What are &quot;refs&quot; and why would I want to update them?<p>What is HEAD?  Why isn&#x27;t it named something more intuitive?<p>Etc.  Why did I have to Google around for it?  Because the documentation didn&#x27;t actually answer my questions.<p>It&#x27;s all compounded by the way the documentation is written:  namely, from the perspective of the user who is intricately familiar with how git works.  You have to remember the silly and needlessly obtuse names for everything.  Why is there no &quot;git-undo-commit&quot;?  What the fuck does rebase do?  Bisect?<p>I realized writing this that even though I have undone commits in the past, I don&#x27;t actually know how to do it.  I just Google it every time.<p>It has the advantageous position of being better for certain workflows than CVS or mercurial perhaps, but frankly git is just not a very good piece of software.