git 找回丢失的commit
From : http://dmouse.iteye.com/blog/1797267
git 的错误操作,导致丢失了重要的commit,真是痛不欲生;
最后通过git神器终于找回了丢失的commit,但是需要总结和反思的地方有一些,同时需要加深git的学习,特献上本文以供参考
执行git reset --hard HEAD~1 ,删除了commit3,但是发现reset错了,晕菜了……
还好有后悔药(感叹git的强大啊,神马意外情况都考虑到了)满血恢复commit3,执行如下步骤:
- git reflog
- 502dd0f HEAD@{0}: HEAD~1: updating HEAD
- 147b3b5 HEAD@{1}: commit: test3
- 502dd0f HEAD@{2}: commit: test2
- 0692c03 HEAD@{3}: commit (initial): test1
- git reset --hard 502dd0f
- 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的更多相关文章
- 找回Git中丢失的Commit
在使用Git的过程中,有时候会因为一些误操作,比如reset.rebase.merge等.特别是在Commit之后又执行了git reset --hard HEAD强制回滚本地记录以及文件到服务器版本 ...
- (转)找回Git中丢失的Commit
总结:更新代码前一定要先将本地修改的文件存到本地git仓库.今天脑残直接更新了远程仓库代码导入今天写的代码...... @[git|commit|reflog] 在使用Git的过程中,有时候会因为一些 ...
- git找回丢失的代码
多人开发时找回丢失的代码 1.先保证所有分支的代码都已经提交并拉取到最新状态. 2.最重要的是需要找到最近一条自己代码还存在的记录,然后复制到最近的更早一条的提交记录的id,比如e36e9e76da1 ...
- git 找回 git reset --hard HEAD 后的代码
下面方法只针对当你本地代码做了 git add 或则 git commit 后又手贱的重置本地代码到上一个版本,导致本地代码丢失的情况. 如果你没有 git add 命令,而直接 git reset ...
- git中找回丢失的对象
本文转载自:http://gitbook.liuhui998.com/5_9.html 译者注: 原书这里只有两个链接: Recovering Lost Commits Blog Post,Recov ...
- git cherry-pick合并某个commit
1.使用方法及其作用 git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作(操作的对象是commit).例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开 ...
- svn迁移到git仓库并保留commit历史记录
svn迁移到git仓库并保留commit历史记录 最近在做svn迁移到gitlab,由于之前一直是由svn做版本控制.最简单的方式是将svn的内容export出来,然后添加到gitlab即可.但是,如 ...
- git 对比两个commit 之间的差异
git 对比两个commit 之间的差异 比较两个版本之间的差异 git diff commit-id-1 commit-id-2 > d:/diff.txt 结果文件diff.txt中: &q ...
- Git合并最近的commit
合并commit的做法一般用在pull request的时候,把开发同一功能时的所有琐碎的commit合并到一个(假装自己的代码是高质量代码(手动滑稽)).主要使用的命令是git rebase 或者g ...
随机推荐
- 使用jqgrid的C#/asp.net mvc开发者的福音 jqgrid-asp.net-mvc
你是否使用jqgrid? 你是否想在C#/asp.net mvc中使用jqgrid? 那你很可能曾经为了分析jqgrid的request url用fiddler忙活了2个小时.(如果你要使用jqgri ...
- 每日Scrum(5)
进入冲刺第五天,软件的界面设计成为主打,收集学校的很多美图是我们组的任务: 问题在于软件已很难有很大的改进,大方向也都是变不了的
- mysql / mysqld_safe / mysqld 常见错误处理
1. FATAL ERROR: Could not find ./bin/my_print_defaults [root@localhost scripts]# ./mysql_install_db ...
- gulp系列:简单实践
coffescript测试源码 gulp = require('gulp') #删除 1.清空目录 常用插件 gulp-clean .del (nodejs模块) del = require('d ...
- my_strlen()
int my_strlen(const char* S){ int i=0; while('\0'!=*(S+i)){ i++; } return i; }
- ASP.NET 跨域
#region 支持跨域请求 //Response.ClearHeaders(); string origin = Request.Headers["Origin"]; Respo ...
- Struts2文件上传,以及各种注意事项
首先肯定是要配置好struts2环境,这个在另一篇<struts2环境搭建,以及一个简单实例>里已经讲过了 首先是网页部分,upload_file.jsp <%@ page lang ...
- css3 border-radius
前缀对应浏览器 前缀 浏览器 -webkit chrome和safari -moz firefox -ms IE -o opera border-radius: <style type=&quo ...
- web进阶之jQuery操作DOM元素&&MySQL记录操作&&PHP面向对象学习笔记
hi 保持学习数量和质量 1.jQuery操作DOM元素 ----使用attr()方法控制元素的属性 attr()方法的作用是设置或者返回元素的属性,其中attr(属性名)格式是获取元素属性名的值,a ...
- Manacher's algorithm: 最长回文子串算法
Manacher 算法是时间.空间复杂度都为 O(n) 的解决 Longest palindromic substring(最长回文子串)的算法.回文串是中心对称的串,比如 'abcba'.'abcc ...