一年前,我开了一个 Bitbucket 帐户,并用它来跟踪本地文件夹的版本(在我的个人笔记本电脑上)。
从那以后我的笔记本电脑“死了”,我买了一台新的。我的文件已备份在 Mega 云上,因此它们已成功恢复。虽然,.git 文件没有恢复。现在我想将更新的本地存储库连接到旧的过时 Bitbucket 存储库。
如何在不删除当前本地更新的情况下做到这一点?
感谢你的帮助!
一年前,我开了一个 Bitbucket 帐户,并用它来跟踪本地文件夹的版本(在我的个人笔记本电脑上)。
从那以后我的笔记本电脑“死了”,我买了一台新的。我的文件已备份在 Mega 云上,因此它们已成功恢复。虽然,.git 文件没有恢复。现在我想将更新的本地存储库连接到旧的过时 Bitbucket 存储库。
如何在不删除当前本地更新的情况下做到这一点?
感谢你的帮助!
令我感到奇怪的是,该.git
目录不会在您的备份中恢复。从 git 外部的角度来看,这个目录中的文件与任何其他文件没有什么不同。在决定下一步做什么之前,我想确保我理解了这样做的原因。
但是由于您指的是“更新的本地存储库”,所以我假设您已经采取措施在本地路径创建一个新的 git 存储库,无论之前发生了什么[1]。在那种情况下,你大概有这样的东西:
On Bitbucket
A -- B -- C -- D <--(master)
Locally
E -- F <--(master)
我假设与保存在 BitBucket 中的最后一次提交相比,新仓库中的第一次提交是目录的更新状态。
所以首先要做的是将bitbucket存储库配置为远程
git remote add origin url://of/remote/repo
其中 URL 与您用于克隆的 URL 相同。然后
git fetch
你在本地有
A -- B -- C -- D <--(origin/master)
E -- F <--(master)
接下来你需要re-parent
E
进入D
. 请参阅git filter-branch
文档 ( https://git-scm.com/docs/git-filter-branch ),具体与该--parent-filter
选项相关。有几个示例显示了完成此任务的不同方法。
[1] 如果我误读了您的陈述,而您还没有重新创建本地 repo,那实际上更简单,因为这意味着没有本地历史可以移植。在这种情况下,您可以执行类似的操作
cd /path/of/local/repo
git clone -n url://of/remote/repo old-repo
mv old-repo/.git .
rmdir old-repo
然后暂存并提交您当前的状态。像这样移植文件夹有点麻烦.git
;但它似乎在我的测试中有效,我不知道它应该失败的原因。