git find commit from";“工作树”;

git find commit from";“工作树”;,git,restore,Git,Restore,假设有人克隆了一个git存储库并删除了.git文件夹。有没有办法恢复他们所做的承诺?这不是或的复制品,因为这件事已经过去多年了。我现在正试图让它回到git下,以更新到新版本。然而,这些年可能引入了一些更改,我需要将这些更改合并/重新设置到新版本上 我目前的想法是: 使用git Clone--bare将当前存储库从github克隆到另一个文件夹中 使用git config--local--bool core.bare false将回购标为非裸 将神秘版本中的文件复制到此文件夹中 将工作树的差异与当

假设有人克隆了一个git存储库并删除了.git文件夹。有没有办法恢复他们所做的承诺?这不是或的复制品,因为这件事已经过去多年了。我现在正试图让它回到git下,以更新到新版本。然而,这些年可能引入了一些更改,我需要将这些更改合并/重新设置到新版本上

我目前的想法是:

  • 使用
    git Clone--bare将当前存储库从github克隆到另一个文件夹中
  • 使用git config--local--bool core.bare false将回购标为非裸
  • 将神秘版本中的文件复制到此文件夹中
  • 将工作树的差异与当前提交哈希保存在某个位置
  • 更新HEAD-to-HEAD^(不确定如何在不修改工作树的情况下执行此步骤。可能会切换回裸机,签出HEAD^切换回非裸机?我也读过git symbolic ref管道,但不知道如何使用它)
  • 重复步骤4-5,直到到达根部
  • 选择具有最小尺寸的差异。这应该是该代码所偏离的提交的一个很好的近似值。在该提交周围搜索确切的分歧点
  • 有更好的办法吗?有一个semver,但没有太多更新,所以它只将范围缩小到大约一到两年。我不相信存储库有太大的变化,所以我猜有完全匹配的文件。也许我可以利用这些信息来缩小可能的提交范围?谢谢

    我会:

  • 将实际源提交到某个分支(例如
    \u tmp\u
    ),以便索引是干净的

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

    
    git版本列表主控|读取版本时;做
    git diff“$rev”\u tmp”和&echo“它是$rev!”
    完成
    

    \u tmp\u
    包含存储库中未跟踪的文件时,
    git diff
    将永远不会成功,您必须分析差异(例如,这与最低的
    wc-l
    有关)


  • 谢谢,这让我找到了正确的方向
    git diff
    将打印/调用查看器。此外,看起来所有空格都已更改。因此,我将命令替换为
    echo“$rev”`git diff-w--shortstat“$rev”\u tmp\u”>../diffs.txt
    ,然后进行扫描,找到插入/删除最少的命令。