如何重新创建在存储库移动时丢失和无法访问的旧提交

时间:2015-07-28 14:56:48

标签: git clone commit recover

我已经从gitious转移到gitlab,当第一次推送到gitlab时,忘了也推送我的所有标签。

在旧的存储库中,由于在提交链提示处有一个标记,因此只能访问某些提交。由于新的repo没有推送标签,这些提交现在无法访问 - 实际上,它们甚至不再存在于我的本地或新的远程存储库中(可能是gc'ed)。 我希望我能以某种方式恢复这些提交而不会弄乱任何历史记录。情况如下:

A---B---C---D---E---F <-- master today
     \                
      X---Y---Z       
              ^       
              lost tag

我的磁盘上仍然有旧的本地存储库(与一个现在不可用的gitorious遥控器链接)以及我想要推送到新回购的提交X Y Z.

我将如何做到这一点?

1 个答案:

答案 0 :(得分:0)

我已根据 nwinkler 的建议设法解决了我的问题:

在旧的本地回购中,我已将遥控器更改为新的回购并推送了所有标签:

git remote rm origin
git remote add origin [new repo URL]
git push --tags

(我想我可以使用set-url但我从头脑中不知道这一点。)

有趣的是,这并没有推动失去的标签&#34;即使它存在于旧的本地回购中。我必须在本地现有标签上创建一个临时分支并将其推送

git checkout <lost-tag-which-exists-in-old-local>
git checkout -b temp-resurrect
git push -u origin temp-resurrect
git branch -d temp-resurrect
git push origin --delete temp-resurrect

在此之后,我可以看到提交X Y Z和新远程存储库(Web界面)中的标记,并拉出标记并提交到新的本地存储库。

我现在暂时搁置这个问题,万一有人找到解决问题的更好方法。