2014-12-05 26 views

回答

1

this question about how to do this for one branchgit fsck方法可能還不夠在這裏,因爲有多個分支刪除可能存在一些問題,這些承諾去與分支機構。但是,如果事實證明回答,很容易,它可能會是最快的做這種方式:

git fsck --no-reflogs \ 
| awk '$2 == "commit" {print $3}' \ 
| xargs git show -s 

如果藏匿產品不保持足夠的日誌,那麼如果它實際使用git或者是一些實現git reflogs的東西,你至少可以使用它們來恢復已刪除的refs。

git刪除顯式刪除分支的reflog,包括推送顯式刪除;那些現在已經從你受損的回購和誰明確推動刪除的回購。

但從您的回購做平原提取的遙控器不解釋爲刪除其分支的請求跟蹤您的refs - 沒有明確的刪除請求的提取不是一個明確的請求刪除任何超過沒有明確的刪除請求是。爲此,必須明確詢問提取(使用--prune)以不再在遠程中修剪分支。

所以沒有做任何明確的清理的回購肯定仍然有遺漏的遠程追蹤分支,您可以查看其日誌中最近的事務。最簡單的自動化方法是

git for-each-ref refs/remotes/$remote --format='git reflog -1 %(refname)' \ 
# | sh -x 

該輸出中沒有reflog的分支自初始提取以來未更改過。


現在你可以回到你的損傷回購,如果有任何問題,其他回購記住一個分支提交的是最近的,做

git log --graph --decorate --oneline $each $candidate $commit 

,以幫助你找到它。

git branch $branch $therightcommit恢復它。


也許有人會知道一個簡單的方法與藏匿(或混帳爲此事)要做到這一點,如果沒有,這可能是值得一試。

相關問題