如果我们解压缩一个提交,你自己可以看看到底是什么:// by looking at the history you can easily find your commit hash// you also don't have to paste the whole hash, only enough // characters to make the hash uniquegit cat-file -p 4cf44f1e3fe4fb7f8aa42138c324f63f5ac85828
这是我看到的tree 86550c31847e518e1927f95991c949fc14efc711author Pierre De Wulf <test@gmail.com> 1455775173 -0500committer Pierre De Wulf <test@gmail.com> 1455775173 -0500commit A
如你所见我们得到了所期望看到的的:快照的哈希,作者,提交信息。这里有两样东西很重要:
那么现在你知道 git 的每一个对象都有一个正确的哈希值。现在我们来看看 HEAD 吧!那么,在 HEAD 里又有什么呢?cat HEADref: refs/heads/master
这看起来 HEAD 不是一个hash,倒是容易理解,因为 HEAD 可以看作一个你目前所在分支的指针。如果我们看看 refs/heads/master,就会发现这些:cat refs/heads/master4cf44f1e3fe4fb7f8aa42138c324f63f5ac85828
是不是很熟悉?是的,这和我们第一个提交的哈希完全一样。由此表明分支和标签就是一个提交的指针。明白这一点你就可以删除所有你想删除的分支和标签,而他们指向的提交依然在那里。只是有点难以被访问到。如果你想对这部分了解更多,请参考git book。