假设有人克隆了一个 git 存储库并删除了 .git 文件夹。有没有办法恢复他们所在的提交?这不是重复的恢复 .git 文件夹的最佳方法 https://stackoverflow.com/q/24775326/1248889 or 删除的.git可以恢复吗? https://stackoverflow.com/q/6246907/1248889, 因为years自从这次事件以来已经过去了。我现在正在尝试将其恢复到 git 下以将其更新到新版本。然而,那些年可能已经发生了变化,我需要合并/重新调整到新版本。
我目前的想法是:
- 使用以下命令将当前存储库从 github 克隆到另一个文件夹中
git clone --bare
- 使用以下命令将存储库标记为非裸机
git config --local --bool core.bare false
- 将神秘版本的文件复制到此文件夹中
- 将工作树与当前提交哈希的差异保存在某处
- 将 HEAD 更新为 HEAD^ (不太确定如何在不修改工作树的情况下执行此步骤。可能切换回裸露,签出 HEAD^ 切换回非裸露?我也读过有关 git symbolic-ref 管道的内容,但不'不知道怎么用)
- 重复步骤 4-5 直到根
- 选择尺寸最小的差异。这应该是该代码所偏离的提交的一个很好的近似值。在该提交周围搜索确切的分歧点。
有没有更好的办法?有一个 semver,但它没有更新太多,所以它只将范围缩小到大约一两年。我不相信存储库发生了太大变化,所以我猜有完全匹配的文件。也许我可以使用该信息来缩小可能的提交范围?谢谢!
我会做:
将实际源提交到某个分支(例如_tmp_
),这样索引就干净了
-
迭代所有可能的提交(例如git rev-list master
)并检查差异
git rev-list master | while read rev; do
git diff "$rev" "_tmp" && echo "it is $rev!"
done
When _tmp_
包含存储库中未跟踪的文件,git diff
永远不会成功,你必须分析差异(例如,最低的wc -l
wins).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)