git 找回丢失的commit

摘要:
发件人:http://dmouse.iteye.com/blog/1797267git由于操作错误而失去重要承诺是痛苦的;最后,最终通过git工件找到了丢失的提交,但有一些方面需要总结和反映。同时,我们需要深化对git的研究。本文是为了参考执行gitset--hardHEAD~1,删除commit3,但我们发现重置错误,食物头晕,还有后悔药(感叹git强大

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

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的引用可    以指向前一次的操作状态 

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中发生变化的文件

免责声明:文章转载自《git 找回丢失的commit》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mybaits3.2.8 别名包扫描通配符Mysql慢查询分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Git操作之码云代码clone

安装Git  https://git-scm.com/book/zh/v2/起步-安装-Git  Git的网站上有详细的分各种系统的安装教程。 配置Git  1. 打开你要放置项目的本地路径,右键选择$ Git Bash Here。  2. 初始化用户名:$ git config --global user.name "用户名" 用户名修改为自己的用户名...

Git学习笔记(一)

刚开始学Git,记录下来,讹误之处还望指教。 安装好git之后,有两个东东,如图: git bash 表示是命令行操作。 git GUI 表示是图形化操作。但是这个界面用起来不方便,另一个图形化操作工具是Tortoise Git,不过个人并不建议使用图形化操作界面,因为不方便在Linux和Windows之间来回切换。 好了,废话不多说,安装好之后点击...

04: gitlab安装与使用

1.1 gitlab安装(192.168.56.12中安装)   1、GitLab是什么?       1. GitLab实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。       2. GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。       3. 可以管理团队对仓库的访问,它非常易于浏览提交...

git远程版本回退

本文为博主原创,未经允许不得转载:   之前在git提交版本时,发现将新开发的代码提交到了另一个分支上,为了不影响提交分支代码的 功能,需要回退到之前的版本。   在使用命令回退的时候,一直没有回退成功,有个同事过来帮忙,成功回退到之前的版本,并记录 一下。   查找到git提交时的备注,时间,找到提交时的版本,并方便回退。 同事是在git 小乌龟上进行回...

IDEA配置github并上传项目

© 版权声明:本文为博主原创文章,转载请注明出处 1.在github中创建一个账号:https://github.com/join?source=header-home 2.下载并安装git:https://git-scm.com/downloads 3.安装成功后打开Git Bash,输入下列命令,设置git全局用户名和邮箱 $ git config -...

Git敏捷开发--rebase命令

git rebase是git下比较常用的命令,以下记录自己遇到较多的使用场景。 合并分支 在多人协作的项目中,拉分支是很常见的事情,经常需要同步自己的分支与远端master分支一致,有两种方式: git merge master git rebase master 两者的区别在于:前者会在生成一条 Merge branch master into XX...