2021年8月1日 星期日

git 還原刪除的分支 branch

如何 還原 錯誤被 刪除 的 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 "要重建的新分支名" "提交點的哈希碼"

這樣就能還原被刪除的分支了,一個一個慢慢還原就好



參考

沒有留言:

張貼留言