我粗心地将.git
从一个项目(A)复制到另一个项目(B),并使用远程scp -r (A) (B)
。
我想恢复git repo的可用状态。我可以删除(A)的.git对象。从那里,我怎样才能最好地找到git branch的提示并重建一个有用的repo状态。
不幸的是,我没有(B)的另一个副本,我的错误消除了元数据。
答案 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