如何 還原 錯誤被 刪除 的 branch
說來悲劇我在用Fork刪除本地分支的時候不小心勾選到刪除伺服器上的,導致服務器上的分支也被刪除了。沒弄回來我們這群人這幾個月的活都白幹了…好在是有找回來,下面記錄一下流程。
搜尋被刪除的分支
分支被刪除之後就丟失信息了,唯一能查的只有當前還沒有被git清理掉的野指標(reachable commit)有哪些
查詢野指標 (連按三下選取一行)
git fsck --full --no-reflogs --unreachable --lost-found | grep commit
這樣就能查到了,更進階一點可以把commit信息查出來(連按三下選取一行)
git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\ -f3 | xargs -n 1 git log -n 1 --pretty=oneline
如此一來就可以更方便查找正確的提交點了
如果想要查看更詳細的提交的時間、上色等,可以這樣用。
git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\ -f3 | xargs -n 1 git log -n 1 \
--date=format:'%Y-%m-%d %H:%M:%S' \
--pretty=format:"%C(reset)[%cd] %C(yellow)%h %C(cyan)<%cn> %C(reset)%s"
更詳細的提交信息如何查看,可以看官方的說明:https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2
只不過這個搜尋到的是當前野指標,之前刪除過的分支也會存在沒辦法區分開。預設的刪除自動回收垃圾的時間是兩周,兩周內產生的野指標保證都會在。
只能自己看提交信息過濾,至少能保證被你幹掉的分支一定能找回來。只是可能會有多餘的提交點,多的東西時間久了一定會知道,沒時間過濾就先放著吧。
2023-10-19
追加一個顯示前一個節點的,雖然有試圖只顯示所有分之的最後結點,不過寫起來太長了,拿到這個資料之後,自己再丟程式處理
git fsck --full --no-reflogs --unreachable --lost-found | grep commit | cut -d\ -f3 | xargs -n 1 git log -n 1 \
--date=format:'%Y-%m-%d %H:%M:%S' \
--pretty=format:"%C(reset)[%cd] %C(yellow)%h%C(green) <-%p %C(cyan)<%cn> %C(reset)%s"
重建分支
分支名稱可以當作是提交點的名別,這個資訊刪掉就沒了,沒辦法得知這個提交點過去是哪個分支,通常提交都會有規範要一併打上分支的名字,可以順著這個名字重建回來。如果沒有那就只能靠自己回想了,或是找到要復原的提交點在自己想個新的建立吧。
還原方式是先在找到所需要的提交點建立新的分支(取新的別名)即可。建立分支有兩種方式,任選一個就好。
# 建立新分支,並切換到新分支
git checkout "提交點的哈希碼" -b "要重建的新分支名"
# 建立新分支,停留在原本分支不切換
git branch "要重建的新分支名" "提交點的哈希碼"
這樣就能還原被刪除的分支了,一個一個慢慢還原就好
參考
- https://stackoverflow.com/questions/3640764/can-i-recover-a-branch-after-its-deletion-in-git
- https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2
- https://crazylion.wordpress.com/2011/02/21/%E6%95%91%E5%9B%9E%E5%88%AA%E9%99%A4%E7%9A%84-branch/
- https://www.cnblogs.com/bellkosmos/p/5923439.html
沒有留言:
張貼留言