我正在做一些实验来测试我对 git 如何存储分支的理解。
我的理解是,Git 存储所有提交哈希值,因此即使您删除了一个分支,该分支的快照仍然存在于提交哈希值下,只要您知道哈希值,您就可以恢复已删除的分支。
为了测试这一点,我尝试了以下操作(在两台计算机上将存储库推送到 Github):
在 GitHub 上创建存储库
计算机 1 :
experiment
experiment
并将其推送到GitHubexperiment
删除
experiment
experiment
experiment
电脑2:
experiment
,检查我记下的哈希值结果
computer 2
我收到错误:pathspec 'd168' 与 git 已知的任何文件不匹配computer 1
上它有效。所以我想我的理解是错误的。 如果您本地仍有信息,则只能恢复已删除的分支。即与已删除的
experiment
分支相关的信息仅存在于计算机 1 上?不在远程 GitHub 存储库上?
所以不能在计算机 2 上使用?
git-clone
的文档指出:“将存储库克隆到新创建的目录中,为克隆存储库中的每个分支创建远程跟踪分支(使用 gitbranch --remotes 可见),并创建
并检查从克隆存储库当前活动分支分叉的初始分支。”
这意味着当您克隆存储库时,它仅复制复制远程上所有分支所需的提交。在你的情况下,提交
d168
位于远程(除非github有非常积极的垃圾收集政策并且已经删除了它),但当前存在的任何分支都不需要它(因为你删除了该分支) ,因此在新克隆期间不会复制它。
尝试
git fetch origin d168....