现象一句话:
"把 HEAD 落在历史提交上 → 改完顺手 git commit
→ 切分支 → 刚才的 commit '消失'"。
根本原因:
你提交时 HEAD 是游离(detached)状态,没有分支指针指向它;切走后 Git 再也找不到那条 commit,于是"好像没了"。
找回与保留的两步法
-
先找回"丢失"的 commit
bashgit reflog # 找到刚才那一步的 HASH # 输出示例 # HEAD@{1}: commit: fix: xxx
复制对应的 HASH(如
a1b2c3d
)。 -
让分支重新指向它(任选一种)
-
A. 直接新建分支
bashgit branch rescue a1b2c3d # 把 rescue 指向该 commit git switch rescue # 切过去,历史+修改都在
-
B. 合并到当前分支
bashgit switch 目标分支 # 先回到你想合并的分支 git merge a1b2c3d # 把那次 commit 合进来
-
以后避免再"丢"commit
-
不要在游离 HEAD 上长期工作
想改旧版本 → 先建分支再改:
bashgit switch -b 新分支名 <历史提交>
这样 HEAD 立即被分支"拴住",后续 commit 自然留在分支上。
-
养成用 reflog 的习惯
任何"被切走""被 reset"的 commit 90 天内都能通过
reflog
找回,真正"删除"只有git prune
+ 过期无引用。
一句话记住
"游离 HEAD 的 commit 没有分支指针 = 孤儿"
→ 改历史前先 git switch -b 新分支
→ 万一切丢,git reflog
+ git branch 新分支 <HASH>
秒找回。
更多阅读
大前端++
AI 对大前端项目的冲击,【大前端++】来抵御
【混合开发】进阶到【大前端++】
【大前端++】几大特征
【大前端++】前端、大前端、大前端++的区别有哪些?
Android推荐阅读
Cannot fit requested classes in a single dex file (# methods: 93047 > 65536)
【Android】开发者模式启用
开发工具链推荐
API开发工具postman、国内xxapi和SmartApi的性能对比