🔑 Git reflog:误删分支后,Git 为什么还能救回来
很多人以为,
这个设计解决了一个实际问题:Git 允许你频繁重写本地分支历史,但不能因为一次误操作就立刻丢掉所有线索。只要旧提交还没有被 Git 的垃圾回收清理,reflog 就能提供恢复入口。
不过,reflog 是本地记录,不会随
🧪 课后一题:你刚执行了
💡 易混淆点:
#CS
很多人以为,
git reset --hard 之后,之前的提交就彻底消失了。其实,Git 里的提交对象和分支名是两回事:提交本身通常不会被修改,分支只是一个指向某个提交的可移动指针。git reflog 记录的正是这些指针曾经指向过哪里。执行 git reflog,你可能会看到类似 reset: moving to HEAD~3 的记录,以及操作前的提交哈希。找到目标哈希后,就可以用 git reset --hard <commit-hash> 把分支指针移回去;如果只是担心再次操作失误,也可以先用 git branch rescue <commit-hash> 建一个临时分支。这个设计解决了一个实际问题:Git 允许你频繁重写本地分支历史,但不能因为一次误操作就立刻丢掉所有线索。只要旧提交还没有被 Git 的垃圾回收清理,reflog 就能提供恢复入口。
不过,reflog 是本地记录,不会随
git push 上传到远程仓库。换一台机器,或者仓库长期没有访问导致过期记录被清理,就不一定还能找到它。发现误操作后,越早查看 reflog,恢复成功的机会越大。🧪 课后一题:你刚执行了
git reset --hard HEAD~3,想找回 reset 之前的分支位置,最可靠的做法是什么? git refloggit reset --hard <那个哈希>💡 易混淆点:
git log 展示提交历史,而 git reflog 展示本地分支和 HEAD 指针的移动记录,后者不是远程共享日志。#CS