在使用Git的過程當中,有時可能會有一些誤操做git
好比:執行checkout -f 或 reset -hard 或 branch -d刪除一個分支工具
結果形成本地(遠程)的分支或某些commit丟失日誌
能夠經過reflog來進行恢復,前提是丟失的分支或commit信息沒有被git gc清除hash
通常狀況下,gc對那些無用的object會保留很長時間後才清除的it
reflog是git提供的一個內部工具,用於記錄對git倉庫進行的各類操做object
可使用git reflog show或git log -g命令來看到全部的操做日誌file
恢復的過程很簡單:gc
1. 經過git log -g命令來找到咱們須要恢復的信息對應的commit_id,能夠經過提交的時間和日期來辨別。一個好的辦法是運行:一、git log --since="2 weeks ago" -- myfile 能夠2個星期期間的myfile歷史;2、git log --branches="develop" 能夠查看develop的commit文件
2. 經過git branch recover_branch[新分支] commit_id 來創建一個新的分支時間
這樣,咱們就把丟失的東西給恢復到了recover_branch分支上了。
Q:若是是不當心執行了git reset,還有辦法取消嗎?
A:git reflog 查看操做歷史,找到以前 HEAD 的 hash 值,而後 git reset --hard 到那個 hash 便可。
Q:怎樣找回歷史版本中刪除的文件?
A:先肯定須要恢復的文件要恢復成哪個歷史版本(commit),假設那個版本號是: commit_id,那麼
git checkout [commit_id] -- <path_to_file>