我觉得要深入理解Git,还是得看源码。相较于其他的(如 svn,甚至 hg),我觉得 git 的实现更像一个 file system,从里到外(或从上到下)的几个设计层面来看都是 symlink 和 data blob 的结构,这点是我认为和其他 VCS (SCM) 的本质区别可能是这样,加上早期使用者仅限于开发者的情况,git cli 设计有明显的 leaky abstraction,即必须知道具体实现,才能理解和正确使用本来应该为 blackbox 的各种 subcommand
因此我认为,要会正确使用并用好 git,恐怕没有捷径可走,只能从理解 git 的实现原理开始,即什么 data blob 和 tree 等(这也是大多数 git 书一上了就介绍 git 的底层存储方式设计的原因),然后才是 DVCS 的基本原理,即在 DVCS 中历史是 directed acyclic graph。