現象一句話: “把 HEAD 落在歷史提交上 → 改完順手 git commit → 切分支 → 剛才的 commit ‘消失’”。

根本原因: 你提交時 HEAD 是遊離(detached)狀態,沒有分支指針指向它;切走後 Git 再也找不到那條 commit,於是“好像沒了”。


找回與保留的兩步法

  1. 先找回“丟失”的 commit

    git reflog          # 找到剛才那一步的 HASH
    # 輸出示例
    # HEAD@{1}: commit: fix: xxx
    

    複製對應的 HASH(如 a1b2c3d)。

  2. 讓分支重新指向它(任選一種)

    • A. 直接新建分支
      git branch rescue a1b2c3d      # 把 rescue 指向該 commit
      git switch rescue              # 切過去,歷史+修改都在
      
    • B. 合併到當前分支
      git switch 目標分支            # 先回到你想合併的分支
      git merge a1b2c3d              # 把那次 commit 合進來
      

以後避免再“丟”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:如何在組織集體或團隊裏得到認可

健康雜談

【論健康】怎麼才算健康(健康的本質) 【論健康】健康的不可能三角