How to teach Git
I only have a sample of 1 (my wife) but I've found Ungit:
<a href="https://github.com/FredrikNoren/ungit" rel="nofollow">https://github.com/FredrikNoren/ungit</a>
unparalleled for explaining the graph model behind git — what's a merge, what it means to fetch vs pull, what's the difference between committing locally vs push etc...<p>The specific points that make it great for such teaching:<p>1. pretty graph<p>2. hovering over actions such as Commit / Merge / Rebase / Push shows what <i>would</i> happen to the graph if you do it.<p>3. you can manually "Move" local & remote branches anywhere you want!  This is mildly risky as a habit, but much clearer to explain than fast-forward and push, especially with multiple remotes.<p>4. automatic fetch that works pretty well (though explicit fetch UI with multiple remotes is clunky).  For people scared of merging and conflicts, it's liberating to teach "fetch is always safe" and "local commit is always safe", and that you can fast-forward or merge/rebase separate step.