git 从 "working tree" 中找到提交
git find commit from "working tree"
假设某人克隆了一个 git 存储库并删除了 .git 文件夹。有没有办法恢复他们正在进行的提交?这不是 Best way to restore .git folder or Can deleted .git be restored? 的重复,因为自此事件以来 年 已经过去。我现在正在尝试将其恢复到 git 以将其更新到新版本。但是,那些年可能已经引入了更改,我需要 merge/rebase 到新版本。
我目前的想法是:
- 使用
git clone --bare
将当前存储库从 github 克隆到另一个文件夹
- 使用
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
当 _tmp_
包含存储库中未跟踪的文件时,git diff
永远不会成功,您必须分析差异(例如,最低 wc -l
获胜)。
假设某人克隆了一个 git 存储库并删除了 .git 文件夹。有没有办法恢复他们正在进行的提交?这不是 Best way to restore .git folder or Can deleted .git be restored? 的重复,因为自此事件以来 年 已经过去。我现在正在尝试将其恢复到 git 以将其更新到新版本。但是,那些年可能已经引入了更改,我需要 merge/rebase 到新版本。
我目前的想法是:
- 使用
git clone --bare
将当前存储库从 github 克隆到另一个文件夹
- 使用
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
当
_tmp_
包含存储库中未跟踪的文件时,git diff
永远不会成功,您必须分析差异(例如,最低wc -l
获胜)。