覆盖.git目录,从对象中恢复状态

时间:2018-06-09 09:54:38

标签: git .git-folder

我粗心地将.git从一个项目(A)复制到另一个项目(B),并使用远程scp -r (A) (B)

我想恢复git repo的可用状态。我可以删除(A)的.git对象。从那里,我怎样才能最好地找到git branch的提示并重建一个有用的repo状态。

不幸的是,我没有(B)的另一个副本,我的错误消除了元数据。

2 个答案:

答案 0 :(得分:1)

你唯一的问题是恢复裁判。所有B的对象仍然存在,但匹配A名称的任何B的名称(分支,远程,标记,...)都覆盖了对象指针。

开始
git fsck --root

将显示悬空提交和所有根,大多数项目只有一个,然后您可以git log --graph --decorate --oneline --ancestry-path $the $dangling $commits --not $the $roots。由于副本也覆盖了你的reflog,如果你踩到所有 refs,这将找到你所有遗失的历史记录。

答案 1 :(得分:0)

对于A,您应该能够将新的副本(如果有遥控器)克隆到新文件夹“A_copy”中:

  • table_xx(class_id)

或特定分支:

  • git clone <url> A_copy

然后从此副本中取出.git文件夹并将其放入“损坏的”A中。然后使用git clone <url> -b some_branch A_copy查看已更改的内容。

如果您想恢复使用新克隆,或者您可以:

  • git status - 这会让你回到HEAD的状态。

对于B,如果您至少拥有这些文件并且想要将其重新转换为回购,则可以执行以下操作:

  • git reset HEAD --hard - 使文件夹成为git repo
  • git init - 请注意,这将添加此文件夹中的所有内容,以便在需要时首先整理,如果需要,可以添加.gitingore。
  • git add -A