現象一句話: “把 HEAD 落在歷史提交上 → 改完順手 git commit → 切分支 → 剛才的 commit ‘消失’”。
根本原因: 你提交時 HEAD 是遊離(detached)狀態,沒有分支指針指向它;切走後 Git 再也找不到那條 commit,於是“好像沒了”。
找回與保留的兩步法
-
先找回“丟失”的 commit
git reflog # 找到剛才那一步的 HASH # 輸出示例 # HEAD@{1}: commit: fix: xxx複製對應的 HASH(如
a1b2c3d)。 -
讓分支重新指向它(任選一種)
- A. 直接新建分支
git branch rescue a1b2c3d # 把 rescue 指向該 commit git switch rescue # 切過去,歷史+修改都在 - B. 合併到當前分支
git switch 目標分支 # 先回到你想合併的分支 git merge a1b2c3d # 把那次 commit 合進來
- A. 直接新建分支
以後避免再“丟”commit
-
不要在遊離 HEAD 上長期工作 想改舊版本 → 先建分支再改:
git 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的性能對比
心法雜談
【心力建設】《毛選》裏的心法
【心力建設】3:如何在組織集體或團隊裏得到認可
健康雜談
【論健康】怎麼才算健康(健康的本質) 【論健康】健康的不可能三角