git 找回丟失的commit

From : http://dmouse.iteye.com/blog/1797267git

 

git 的錯誤操做,致使丟失了重要的commit,真是痛不欲生; 
最後經過git神器終於找回了丟失的commit,可是須要總結和反思的地方有一些,同時須要加深git的學習,特獻上本文以供參考 

執行git reset --hard HEAD~1 ,刪除了commit3,可是發現reset錯了,暈菜了…… 
還好有後悔藥(感嘆git的強大啊,神馬意外狀況都考慮到了)滿血恢復commit3,執行以下步驟: 學習

Java代碼   收藏代碼
  1. git reflog  
  2. 502dd0f HEAD@{0}: HEAD~1: updating HEAD  
  3. 147b3b5 HEAD@{1}: commit: test3  
  4. 502dd0f HEAD@{2}: commit: test2  
  5. 0692c03 HEAD@{3}: commit (initial): test1  
  6.   
  7. git reset --hard 502dd0f  
  8. git cherry-pick 147b3b5  



丟失的commit3終於回來啦~~~~ 
雖然有利器,可是須要總結和反思的是,慎用reset hard啊,實在不行reset merge也是不錯的選擇。 

=================================================== 

經過此次錯誤的使用reset,反思須要增強對reset的瞭解,不能再盲目的使用了 

git reset [--hard|soft|mixed|merge|keep] [<commit>或HEAD] 
做用:將當前分支reset到指定的<commit>或者HEAD(默認爲最新的一次提交,即重設到最新一次提交以前的版本) 

備註: 
       index,執行git add的操做,會對文件建立索引,全部被跟蹤的文件索引會放入index,表示文件被修改待提交
       working tree,當前工做區,被修改但未被add的文件,存儲在工做區 
       ORIG_HEAD,用於指向前一個操做狀態,每次的commit或者pull或者reset,git 都會把老的HEAD拷貝到.git/ORIG_HEAD,經過對ORIG_HEAD的引用可    以指向前一次的操做狀態 

一、hard(慎用) 
重設index和working tree,全部改變都會被丟棄,包括文件的修改、新增、刪除等操做,並把HEAD指向<commit>, 
所以經過git log查看版本提交記錄,被reset的版本記錄會被丟棄,但能夠經過git reflog查看 

二、soft 
不重設index和working tree,僅僅將HEAD指向<commit>,表示已經commit的文件會取消commit, 
經過git status查看,文件會處於待commit狀態「Changes to be committed」 

三、mixed(默認) 
重設index,但不重設working tree,表示已經被add的文件,被取消add, 
經過git status查看,文件會處於待添加索引狀態 「Changes not staged for commit」 

四、merge 
重設index,重設working tree中發生變化的文件,可是保留index和working tree不一致的文件 

五、keep 
重設index,重設working tree中發生變化的文件spa

相關文章
相關標籤/搜索