首页 > 其他分享 >恢复 git reset -hard 的误操作

恢复 git reset -hard 的误操作

时间:2023-04-21 11:42:19浏览次数:34  
标签:reset HEAD git initial hard commit foo


有时候使用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
* 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
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天以后。

标签:reset,HEAD,git,initial,hard,commit,foo
From: https://blog.51cto.com/u_2198048/6212312

相关文章

  • gitlab命令行修改登录页
    现象误操作修改了登录页的url,导致无法登录的问题修改进入gitlab容器dockerexec-itgitlab/bin/bash进入postgresql数据库命令行gitlab-psql执行更改语句UPDATEapplication_settingssethome_page_url='';重启gitlabgitlab-ctlrestart执行截图......
  • vscode 当做记事本,用任务 tasks 自动提交git - ctrl shift B
    vscode当做记事本,用任务tasks自动提交git-ctrlshiftB起因开始用的joplin本地记事本挺好,唯一缺点不能同步。用了一下,发现markdown是两栏的,变成一栏就是html的。如果要是两栏,我能接受的话,那就直接vscode不就完了吗代码tasks.json{//Seehttps://go.microsof......
  • git 还原 修改
    还原有三种情况:1、只是修改了文件,没有任何git操作2、修改了文件,并提交到暂存区(即:编辑之后,进行gitadd但没有gitcommit-m"留言xxx")3、修改了文件,并提交到仓库区(即:编辑之后,进行gitadd并且gitcommit-m"留言xxx") ......
  • git 的基本使用
    学习系列,git基本命令记录,开始之前,看下git的工作原理图:基础命令gitinit#创建本地仓库gitstatus#查看信息gitadd文件名(*)#将代码提交至暂存区gitcommit-m'备注信息'#将代码提交到本地仓库gitdiff文件名#对比文件信息gitlog(--p......
  • 修改typora代码块颜色,稍微美化Github主题
    typora的GitHub主题是默认主题,也是最符合我的审美的主题。但是仍然有几个小地方不能让我满意:一级标题和二级标题不够明显代码块是白色背景,不好看于是基于官网给的部分代码做了,做了一点小的修改,最终效果如下操作过程如下:1.打开Theme文件夹2.修改为深色代码框在github......
  • git 基本操作
    gitconfig配置全局配置name和邮箱gitconfig--globaluser.name"xxx"gitconfig--globaluser.email"xxx"初始化一个项目1、初始化本地项目gitinit2、基于远程分支克隆gitclone远程仓库地址暂存区操作添加到暂存区gitaddfile...gitadd.暂存所有......
  • GitLab 服务的启动、停止和重启命令
    GitLab服务的启动、停止和重启命令 一、问题现象在使用GitLab管理项目代码时,有时候可能因为服务出现异常,导致无法正常访问GitLab上的代码。报错如下: 二、解决方案重启GitLab服务,命令如下:gitlab-ctlrestart命令执行效果如下: 三、补充说明 1、GitLab......
  • VSCode,轻松提交文件到GitHub
    方法如下:在GitHub创建一个仓库来存放你的项目;2.在本地文件夹(可以是空文件夹,也可以是非空)内右键-GitBashHere进入命令行;3.输入如下命令,会看到一个名字为.git的隐藏文件,这说明该文件夹已经成为受控制的文件夹了;gitinit4.依次输入如下命令,将本地文件夹与远程仓库建立链接......
  • 怎么修改Git remote add时使用的远程仓库?
    评:[email protected]:Liutos/foobar.gitwuyuntao我刚刚找到了办法,就是直接修改.git/config文件了,居然成功了,不过还是谢谢你的建议,之前一直失败,原来是gitremoterm的参数写错了~......
  • Git 的origin和master分析
    评:<<关键是中英文切换着打字太辛苦了转载请注明出处>>首先要明确一点,对git的操作是围绕3个大的步骤来展开的(其实几乎所有的SCM都是这样)1.从git取数据(gitclone)2.改动代码3.将改动传回git(gitpush)这3个步骤又涉及到两个repository,一个是remoterepository,再远程服务......