refs:References,heads或者branches很像是贴在有向无环图上节点便条。有向无环图只能添加节点,已有的节点也不会变动。这些“便条”却可以随意移动。他们不会存储到历史中,它们只是在不同的仓库中移动。它们又像是书签,表明了“我在这里”。(译者注:这样我想起了进程调度的current) git commit命令会在有向无环图中添加一个节点。之后会移动“便条”到新加的节点上。 HEAD这个ref有点特殊:它指向其他的ref,是一个指向当前活跃分支的指针。一般的ref都在类似heads/xxx这样的名字空间下。但是一般你可以忽略heads/部分。 remote refs:remote References可以理解成另外一个一种颜色的便条。和一般ref不同的是他们所在的名字空间。remote refs由远程的服务器控制,可以通过git fetch命令更新。 tag:tag既是有向无环图中的一个节点,也是一种便条(当然是另外一种颜色)。tag指向一个commit,包含可选的描述信息和GPG签名。通过tag的便条可以快速访问一个tag,如果丢失,可以使用git lost-found命令根据tag的GPG签名进行恢复。
历史 好了,有了上面关于git历史版本存储的知识,我们来看看git如何进行类似merge这样的操作,看看git和其他利用分支线性变化,管理历史的工具的区别。 这是一个最简单的仓库。我们使用clone克隆了一个远端的仓库,并且只有一个commit。 我们使用fetch,接受了来自远程仓库的一个commit,但还没有merge。 |