【问题标题】:overwritten git repo with old version of git repo, game over?用旧版本的 git repo 覆盖 git repo,游戏结束了吗?
【发布时间】:2011-08-10 07:55:59
【问题描述】:

我是否完全丢失了所有提交?我知道这很愚蠢,对此我很抱歉,但这是一个无辜的错误,没有正确考虑工作流程。

编辑

覆盖是手动拖放,没有输入终端命令。

我在 Mac 上。

我有时间机器,并且可以检索我的旧新回购(如果你明白我的意思,我的头脑正在融化),但我可以合并它们(已经进行了更改,寻找截止日期)还是我应该恢复完整备份?

【问题讨论】:

  • 你到底做了什么?你在其他地方有克隆吗?
  • 没有克隆!!我用旧文件夹覆盖了文件夹!现在我的头很痛(砖墙看起来很好)
  • 您能否详细列出您运行的确切命令、克隆存储库的位置等。就目前而言,这个问题非常模糊。
  • 在其他任何事情之前,保存你所拥有的,无论你有什么。然后准确解释你做了什么
  • 不确定是否需要投反对票。有些人,嗯?

标签: git backup recovery data-recovery


【解决方案1】:

好吧,这会很麻烦,但你的提交可能仍然存在......

运行git fsck --full(可能需要一段时间)——它会列出所有悬空的blob/trees/commits。使用git log/git show/gitk 检查每个危险的提交。当你找到一个分支的头部提交时,使用git branch <branchname> <sha1 of commit> 重新创建分支(你必须记住你的旧分支名称)


由于您使用时间机器恢复了旧存储库状态并将旧存储库现在放在您的桌面上,对您来说最简单的事情就是添加一个新的远程,然后获取远程提交:

git remote add old-repo /path/to/your/desktop/old-dir/.git
# sorry, no clue what the actual path might be on mac systems (~/Desktop/…?)
git fetch old-repo

之后,您的旧存储库中的所有分支都将以old-repo/branchname 的形式提供。要合并它们,只需发出git merge old-repo/branch 命令。这只是基本的 git fu 将存储库设置为附加远程并合并其更改(这里没有魔法,继续前进)

【讨论】:

  • 如果您要合并两者:是的,您可以合并它们。他们将有一个共同的祖先,可以用作基于合并的。请记住:git 用它们的哈希标识提交,因此完全相同的提交将具有完全相同的哈希。到处。每次。
  • 这个过程是怎样的?
  • 首先,找到你的旧提交。其次,运行git merge <branch or commit to be merged>。没有办法找到你的旧提交。但是,您可以将存储库的当前(新)状态复制到其他地方,将原始存储库路径恢复为其旧状态,然后从复制的存储库中提取更改
  • 我有我的旧提交,但它们现在位于我桌面上的不同文件夹中,我如何将它们全部放在一起而不会再次覆盖它?
  • @mild fuzz:我已经更新了我的答案以解释合并另一个存储库(这还不是远程)
【解决方案2】:

窗户? Linux ?

如果是 Windows,您可以尝试使用恢复工具或可以直接读取磁盘的十六进制编辑器来恢复您的文件。在 Linux 上,我不知道。

但是,如果您没有备份……那是您的错! =)

【讨论】:

    【解决方案3】:

    有时,只是有时你会很幸运。在 Windows 7 上,打开文件夹的属性并单击“以前的版本”。

    我很幸运地找到了一个使用该技术的旧 iPhone 备份,因为它看起来像我已经失去了一切!!

    【讨论】:

      猜你喜欢
      • 2018-07-05
      • 2018-11-12
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 2010-10-27
      相关资源
      最近更新 更多