1. 程式人生 > 其它 >Git stash被誤刪恢復策略

Git stash被誤刪恢復策略

場景:

通過stash儲存,被使用git stash drop 丟起。 專案開發中,不想commit提交,但要切換到其他commit或者branch,臨時處理緊急任務,使用 git stash 備份當前的工作內容。但因不當操作使用“git stash drop”,暫存被刪除  

策略1:

  • 要求:知道被刪除的ID
通過歷史操作記錄,檢視自己drop的ID,通過“git show ID”,“git stash apply ID” 進行檢視和恢復  

策略2:

  • 要求:知道被刪除的大致內容

方式a:

git fsck --lost-found 或者git fsck --unreachable 找到各丟棄的標識ID,如下:
$ git fsck --unreachable
Checking object directories: 100% (256/256), done.
unreachable blob 09c039a0e54677c113dafd4494378889b22a37ab
unreachable blob 2fc07e1fbbf4751d4fde1db05857a54b890aa5f9
unreachable commit 36c05a804042b9622dd13ef133f737d345f83595
unreachable blob 38400bf13924e1dc93181214e4e4f44e9af063b5
unreachable commit 3b80bea1acb07dce3ee4207bdb613f2aa52a4c78
unreachable blob 454099f6835c71dc35ad051fb411da30e1c11515
unreachable blob 45c0153261c7dc0872ea5db048b34b16b2d4646b
unreachable blob 62001790e7e38f8e2e6248e5eb76b5d7f1659750
unreachable blob 7900546139bf5486be9c71cca69190982a5ef581
unreachable blob 7b80cadb286acffc3153963eb1e35bfc4f285a7c
unreachable tree 84c027109e118eae511f8ed27801095a451b8b06
unreachable commit 88802967342507b6ccdd721667a49a0f7fb084e2
unreachable blob dc8002335b2eed9110ca1e0c16b3faed1ccbc66f
unreachable blob 0201f67c69d93516234b1e86aad444b5efd0edbc
unreachable blob 088160e56449dff21367a42ffe0a6dd9dd13f083
unreachable blob 3141ab5a6c2529acaf017931f42a4528d9d9b14b
unreachable tree 478138ac916c76ee401fd980e9a12044d416e865
unreachable tree 53418198a575f9adf980068cb2f5a1f285f8f07c
unreachable blob 5741e1d3f274e84c9a352db47c05c8ecdbdc152d
......
可配合通過策略1進行檢視、內容恢復。
    • 缺點:commitID 數量大(幾百上千個),而且不是根據順序進行排列的,找起來麻煩,不太使用
改進:git fsck --lost-found >>1.txt 匯入到檔案,根據根絕“暫存stash”的特徵,編寫指令碼進行過濾篩選

方式b:

查詢被clear的相關歷史
 git log --graph --oneline --decorate $(git fsck --no-reflog | awk '/dangling commit/ {print $3}')
執行命令後黃色字型為曾不可達(丟棄)的記錄ID。如下:
  • On:被clear 的stash記錄
  • index:被丟失的branch記錄
  • 上面為最新記錄
根據自己儲存名稱,直接 git stash apply ID 進行恢復;不記得名字可通過git show 檢視具體內容,篩選需要的ID

策略3:

  • 要求:使用jetBrains
  • 方式:
      • 點選專案右鍵:選擇“Local History” => "Show History"
      • 選中某條記錄,右鍵“Revert”