git reflog and checkout
用错checkout 了比如想checkout出下面的一个版本,结果用错了
git checkout 8bfd9b1d292 这样会导致HEAD deatched ,在这个地方修改后commit
commit 8bfd9b1d2922b55586f41d37f1a2a992d580e1dd Author: lab <lab@dera.com.cn> Date: Tue Dec 8 20:21:42 2015 +0800
update main.c
当git checkout master 时 刚的8bfd9b1d292 分支就丢了。
可以用下面方法找回
git reflog
c65ec9a HEAD@{0}: checkout: moving from 68657499e57fdcd970f9207ac2cb0f656d3bd5b6 to master
8bfd9b1d292 HEAD@{1}: checkout: moving from master to
git reset --hard 8bfd9b1d292 后可以将恢复
恢复 git reset -hard 的误操作
转帖:http://hi.baidu.com/configuration/item/97fddeea252818d0eb34c964
有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge。甚至一些很小的操作,例如删除一个分支,我都担心数据丢失。
不 久之前,我在做一些大动作(rebasing)之前,我总是备份整个版本库,以防万一。直到最近我才发现git的历史记录是不可修改的,也就是说你不能更 改任何已经发生的事情。你做的任何操作都只是在原来的操作上修改。也就是说,即使你删除了一个分支,修改了一个提交,或者强制重置,你仍然可以回滚这些操 作。
让我们来看一些例子:
$ git init $ touch foo.txt $ git add foo.txt $ git commit -m "initial commit"
$ echo 'new data' >> foo.txt $ git commit -a -m "more stuff added to foo"
你现在看git的历史记录,你可以看到两次提交: $ git log * 98abc5a (HEAD, master) more stuff added to foo * b7057a9 initial commit
现在让我们来重置回第一次提交的状态: $ git reset --hard b7057a9 $ git log * b7057a9 (HEAD, master) initial commit
这看起来我们是丢掉了我们第二次的提交,没有办法找回来了。但是 reflog 就是用来解决这个问题的。简单的说,它会记录所有HEAD的历史,也就是说当你做 reset,checkout等操作的时候,这些操作会被记录在reflog中。
$ git reflog b7057a9 HEAD@{0}: reset: moving to b7057a9 98abc5a HEAD@{1}: commit: more stuff added to foo b7057a9 HEAD@{2}: commit (initial): initial commit
所以,我们要找回我们第二commit,只需要做如下操作: $ git reset --hard 98abc5a
再来看一下 git 记录: $ git log * 98abc5a (HEAD, master) more stuff added to foo * b7057a9 initial commit
所以,如果你因为reset等操作丢失一个提交的时候,你总是可以把它找回来。除非你的操作已经被git当做垃圾处理掉了,一般是30天以后。
转载于:https://www.cnblogs.com/fastwave2004/p/5046382.html
git reflog and checkout相关推荐
- Git相关二三事(git reflog 和彩色branch)【转】
转自:https://www.jianshu.com/p/3622ed542c3b 背景 git太常用了,虽然,用起来不难,但也有很多小技巧的东西... 1. 后悔药 哪天不小心,写完代码,没comm ...
- git reflog 恢复已删除分支
语法: git reflog --date=[iso | local | relative] | grep [-w 全词匹配] <branchname> iso:格式化后的时间时间 loc ...
- 【Git学习】使用git reflog 命令来查看历史提交记录并使用提交记录恢复已经被删除掉的分支
一.问题描述 昨天下午有个同事急急忙忙跑我座位上,要我帮忙,说他刚刚因为手误,将他本地的某个project的某个branch分支删除了,并且也将Gitlab上面的远程分支也删除了.他本来是想发起mer ...
- Git 回滚 checkout、reset、revert
Git 回滚 checkout.reset.revert 首先看一下 Git 的工作流程 checkout 是检出的意思,作用是将某次 commit 的状态检出到工作区,它的过程是先将 HEAD 指向 ...
- 【Git】Git 基础命令 ( 查看提交记录 git log | 版本回滚 git reset | 撤销回滚 git reflog )
文章目录 一.查看提交记录 git log 1.查看详细提交记录 2.查看简略提交记录 二.版本回滚 git reset 1.Git 中的版本表示 HEAD~1 2.版本库代码回滚 三.撤销回滚 1. ...
- Git——版本回退【git reset / git log / git reflog】
前言:下面是在版本回退中常用的命令. 1. git log -- 查看版本日志 $ git log HEAD为当前指向的版本指针.使用git log 查看版本日志后,显示了它们的版本号是一系列SH ...
- git reflog 时光穿梭机
目录 一.问题描述 二.解决 一.问题描述 小白花费一周时间做了git log如下所示6个功能. commit的信息就是做了6个功能,每个功能对应一个commit的提交,分别是feature-1 到 ...
- Couldn‘t checkout branch_name: Revision not found in project_name git 分支无法checkout,切换分支报错
原因:git 分支无法checkout,添加的新分支在本地仓库没有同步 解决办法:同步远程分支至本地仓库 git remote updategit fetch
- Git中smart Checkout与force checkout
Git中smart Checkout与force checkout 使用git进行代码版本管理,当我们切换分支有时会遇到这样的问题: 这是因为在当前分支修改了代码,但是没有commit,所以在切换到其 ...
最新文章
- ValueError: Masked arrays must be 1-D
- 修改表结构添加外键约束,默认外键名
- LeetCode题组:第322题-零钱兑换
- 微信防撤回python代码_Python实现微信防撤回
- maven选包算法(两个相同的包)
- android 5. 蓝牙 mesh,蓝牙mesh组网
- Java学习之道:jdk环境变量配置方法
- 如何在settings里的休眠模式里添加永不休眠
- [android视频教程] 传智播客android开发视频教程
- NHibernate N+1问题实例分析和优化
- 破解版 中易广告联盟程序 v6.0
- 系统篇-在linux上用deb包安装steam。
- PHP进销存源码 ERP多仓库管理系统源码 手机端+小程序版进销存 全开源可二开 uniapp
- yshon对讲机如何调频率_对讲机频率怎么调?四步教你给对讲机调频
- 机器学习技法-01-5-Reasons behind Large-Margin Hyperplane
- 上传图片计算机没有桌面,电脑桌面消失了!
- 使用Matlab绘制gif动图
- 禾穗HERS | 职场新人第一定律
- 西安电子科技大学计算机复试题目,西安电子科技大学考研复试 微机原理练习题...
- 1024 程序员节狂欢盛会,等了一年终于来了(内附大会日程)