Git技术求助:如何将已删除文件的丢失历史添加至新文件?
如何找回Git中未正确追踪重命名操作的旧文件历史?
别慌!这种情况在Git使用中其实挺常见的,Git的底层对象库其实大概率还保留着你旧文件的历史记录,咱们一步步来把它找回来:
第一步:定位旧文件的历史提交
先试试用这个命令遍历所有提交记录,哪怕是那些没被当前分支引用的提交,来查找旧文件的痕迹:git log --all --full-history -- <旧文件名>把
<旧文件名>换成你原来的文件名,这个命令会输出所有涉及过该文件的提交哈希和记录。如果幸运的话,你直接就能看到旧文件的完整历史。第二步:验证并恢复旧文件内容
如果你找到了旧文件最后一次出现的提交哈希(比如a1b2c3d),可以用这个命令查看该提交里的旧文件内容,确认是不是你要找的历史:git show a1b2c3d:<旧文件名>如果内容没问题,先确保当前工作区的变更都已经提交或暂存,然后把旧文件恢复到工作区:
git checkout a1b2c3d -- <旧文件名>第三步:重新关联历史到新文件
现在工作区里应该同时有旧文件和新文件了,咱们用Git的标准重命名命令来关联它们的历史:git mv <旧文件名> <新文件名>然后提交这次重命名操作,提交信息可以写清楚:
git commit -m "修复文件重命名追踪:<旧文件名> -> <新文件名>"第四步:验证历史是否恢复
现在用这个命令查看新文件的历史,应该就能看到重命名前的所有记录了:git log --follow -- <新文件名>
额外小技巧:如果记不清旧文件名怎么办?
要是你连旧文件名都记不全了,可以用这个命令查找Git中所有未被引用的对象,然后逐个查看内容来找旧文件:
git fsck --lost-found
这个命令会把未引用的对象放到.git/lost-found/目录下,你可以用git show <对象哈希>来查看每个对象的内容,找到对应的旧文件。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

