【问题标题】:Recover .git file while the local repository is the updated one在本地存储库是更新的存储库时恢复 .git 文件
【发布时间】:2018-11-10 10:56:19
【问题描述】:

一年前,我开了一个 Bitbucket 帐户,并用它来跟踪本地文件夹的版本(在我的个人笔记本电脑上)。

从那以后,我的笔记本电脑“死机”了,我买了一台新的。我的文件已备份在 Mega 云上,因此它们已成功恢复。虽然,.git 文件没有恢复。现在我想将更新后的本地存储库连接到旧的过时 Bitbucket 存储库。

如何在不删除当前本地更新的情况下做到这一点?

感谢您的帮助!

【问题讨论】:

  • 新笔记本电脑中恢复的文件是否不在 git repo 中管理?您是否要提交更新文件并将其推送到 bitbucket 中?

标签: git version-control cloud bitbucket git-shell


【解决方案1】:

我很奇怪.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] 如果我误读了您的陈述,而您还没有重新创建本地存储库,那实际上更简单,因为这意味着没有本地历史可以移植。在这种情况下,您可以执行类似的操作

cd /path/of/local/repo
git clone -n url://of/remote/repo old-repo
mv old-repo/.git .
rmdir old-repo

然后暂存并提交您当前的状态。像这样移植.git文件夹有点麻烦;但它似乎在我的测试中有效,我不知道它应该失败的原因。

【讨论】:

    猜你喜欢
    • 2014-09-06
    • 2020-05-28
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 2023-03-20
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多