天天看點

從Git倉庫中恢複已删除的分支、檔案或丢失的commit

在使用Git的過程中,有時可能會有一些誤操作

比如:執行checkout -f 或 reset -hard 或 branch -d删除一個分支

結果造成本地(遠端)的分支或某些commit丢失

可以通過reflog來進行恢複,前提是丢失的分支或commit資訊沒有被git gc清除

一般情況下,gc對那些無用的object會保留很長時間後才清除的

reflog是git提供的一個内部工具,用于記錄對git倉庫進行的各種操作

可以使用git reflog show或git log -g指令來看到所有的記錄檔

恢複的過程很簡單:

1. 通過git log -g指令來找到我們需要恢複的資訊對應的commit_id,可以通過送出的時間和日期來辨識。一個好的辦法是運作:1、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] -- 就可以恢複

GitHub 使用教程圖文詳解  http://www.linuxidc.com/Linux/2014-09/106230.htm

Git 标簽管理詳解 http://www.linuxidc.com/Linux/2014-09/106231.htm

Git 分支管理詳解 http://www.linuxidc.com/Linux/2014-09/106232.htm

Git 遠端倉庫詳解 http://www.linuxidc.com/Linux/2014-09/106233.htm

Git 本地倉庫(Repository)詳解 http://www.linuxidc.com/Linux/2014-09/106234.htm

Git 伺服器搭建與用戶端安裝  http://www.linuxidc.com/Linux/2014-05/101830.htm

Git 概述 http://www.linuxidc.com/Linux/2014-05/101829.htm