git find" working tree"

时间:2018-03-01 22:34:14

标签: git restore

假设一个人克隆了一个git存储库并删除了.git文件夹。有没有办法恢复他们所在的提交?这不是Best way to restore .git folderCan deleted .git be restored?的副本,因为此事件后已过去。我现在正尝试在git下将其更新为新版本。但是,在那些年里可能已经引入了变化,我需要将新版本合并/重新绑定到新版本。

我目前的想法是:

  1. 使用git clone --bare
  2. 将当前存储库从github克隆到另一个文件夹中
  3. 使用git config --local --bool core.bare false
  4. 将回购标记标记为非裸机
  5. 将神秘版本中的文件复制到此文件夹
  6. 使用当前提交哈希保存工作树的差异
  7. 将HEAD更新为HEAD ^(不确定如何在不修改工作树的情况下执行此步骤。可能切换回裸露,结帐HEAD ^切换回非裸?我还阅读了git symbolic-参考管道,但不知道如何使用它)
  8. 重复步骤4-5直到root
  9. 选择尺寸最小的差异。这应该是这个代码偏离的提交的一个很好的近似。搜索该提交的确切分歧点。
  10. 有更好的方法吗?有一个semver,但它没有更新,所以它只将范围减少到一年或两年左右。我不相信存储库发生了很大变化,因此我猜测存在完全匹配的文件。也许我可以使用这些信息来缩小可能的提交范围?谢谢!

1 个答案:

答案 0 :(得分:1)

我愿意:

  1. 将实际来源提交到某个分支(例如_tmp_),以便索引是干净的

  2. 迭代所有可能的提交(例如git rev-list master)并检查差异

    git rev-list master | while read rev; do git diff "$rev" "_tmp" && echo "it is $rev!" done

    _tmp_包含未在资源库中未跟踪的文件时,git diff将永远不会成功,您必须分析差异(例如,这具有最低wc -l次胜利。