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

git 的错误操作,导致丢失了重要的commit,真是痛不欲生; 
最后通过git神器终于找回了丢失的commit,但是需要总结和反思的地方有一些,同时需要加深git的学习,特献上本文以供参考

执行git reset --hard HEAD~1 ,删除了commit3,但是发现reset错了,晕菜了…… 
还好有后悔药(感叹git的强大啊,神马意外情况都考虑到了)满血恢复commit3,执行如下步骤:

  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. git reset --hard 502dd0f
  7. 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的引用可    以指向前一次的操作状态

1、hard(慎用) 
重设index和working tree,所有改变都会被丢弃,包括文件的修改、新增、删除等操作,并把HEAD指向<commit>, 
因此通过git log查看版本提交记录,被reset的版本记录会被丢弃,但可以通过git reflog查看

2、soft 
不重设index和working tree,仅仅将HEAD指向<commit>,表示已经commit的文件会取消commit, 
通过git status查看,文件会处于待commit状态“Changes to be committed”

3、mixed(默认) 
重设index,但不重设working tree,表示已经被add的文件,被取消add, 
通过git status查看,文件会处于待添加索引状态 “Changes not staged for commit”

4、merge 
重设index,重设working tree中发生变化的文件,但是保留index和working tree不一致的文件

5、keep 
重设index,重设working tree中发生变化的文件

最新文章

  1. 【JS基础】循环
  2. 《Entity Framework 6 Recipes》中文翻译系列 (9) -----第二章 实体数据建模基础之继承关系映射TPH
  3. Cracking-- 17.13 将二叉树转换成双向链表
  4. FineUI第十四天---布局之垂直布局和水平布局
  5. Oracel数据库连接时出现:ORA-12518:监听程序无法分发客户机连
  6. 北大poj-1001
  7. ubuntu文件定时加密压缩
  8. xcode7.3 iTunes Store operation failed问题
  9. JNI编程(二) —— 让C++和Java相互调用(1)
  10. dirname
  11. 转发:python 装饰器--这篇文章讲的通俗易懂
  12. MySQL根据出生日期计算年龄的五种方法比较
  13. Elasticsearch Kibana查询语法
  14. 前端入门11-JavaScript语法之数组
  15. ubuntu下C/C++获取剩余内存
  16. consul的安装与使用
  17. Algorithm Visualizer
  18. hibernate10--命名查询
  19. Jenkins小试
  20. 线特征---EDLines原理(六)

热门文章

  1. MongoDB使用汇总贴
  2. 0014 Java学习笔记-集合-HashMap集合
  3. MySQL基础学习(二) 常用SQL命令
  4. DGbroker三种保护模式的切换
  5. Tomcat 目录详解
  6. SpringMvc-Httl-shiro的整合
  7. android scrollview 实现上下左右滚动方法
  8. Scala编程第二课
  9. Google Cloud Platform
  10. django用户登录和注销