章节导航
如何用git回复误删的博客文章?
Elon Woo 2 分钟阅读
在不破坏其他改动的前提下,把 `src/blog` 恢复到指定提交后的正确状态,并可安全提交。
0. 先判断是否真的删了
第一步不要急着回滚,先确认删除范围:
git status -sb
如果看到类似 D src/blog/post-1.md,说明是工作区删除;如果远端也没了,再走后面的“恢复 + 提交 + 推送”。
1. 找到恢复基准提交
只看博客目录历史,避免被其他文件干扰:
git log --oneline -- src/blog
再对可疑提交做一次文件级确认:
git show --name-status --oneline <commit>
这一步的标准是:找到“文章还在、内容正确”的那个提交(比如你提供的 91e90b... 及其后续目标版本)。
2. 按目录精准恢复(核心)
恢复命令:
git restore --source <good_commit> -- src/blog
这条命令只影响 src/blog,不会改动其他目录,比 reset --hard 安全得多,适合线上正在开发中的仓库。
3. 恢复后做三层验证
先看文件是否回来了:
Get-ChildItem src/blog
git status --short -- src/blog
再看内容构建是否正常:
npm run build
如果构建出现 Duplicate id "post-x",通常是两个目录里有同名 slug,需要统一文章来源(例如只保留 src/blog)。
4. 提交并推送恢复结果
确认无误后单独提交,便于追踪:
git add src/blog
git commit -m "fix(blog): restore deleted posts"
git push origin main
5. 常见坑
- 不要用
git reset --hard直接回退整库,容易误伤其他改动。 - 不要只恢复单个文件后就结束,先跑构建,确认路由和内容索引没问题。
- 不确定提交时,优先
git log -- src/blog和git show <commit> -- src/blog,再恢复。
6. 一套可复用的最短流程
git status -sb
git log --oneline -- src/blog
git restore --source <good_commit> -- src/blog
npm run build
git add src/blog
git commit -m "fix(blog): restore deleted posts"
git push origin main
这套流程的核心原则是:范围小、可验证、可回溯。