因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新。请访问我的个人网站获取这篇文章的最新内容,Git 代码版本还原方法

在使用 Git 管理自己的代码和资料时,难免会遇到意料之外的事。比如误操作,将当前的分支删除;或者重置到某个版本,然后发现自己想要的代码找不到了;又或者需要还原到之前提交的某个版本,但是那个版本已经被重置过,在历史中找不到了。

忙活了大半天,发现辛苦换来的成果都没了,遇到这种情况几乎是要崩溃的,不过幸好我们还有 Git。

一般情况下,如果在版本的分支历史上,还可以找到想要的那个版本,那通常比较简单,只要选择重置到该版本就可以了。

重置类型有三种模式可供选择,soft、mixed 和 hard 的区别如下:

soft 不改动工作区和索引

假设有一些 commits

A - B - C (master)

HEAD 指向 C, 并且暂存区(stage,或称为 index)matches C.

当使用 git reset --soft B 时,master 和 HEAD 指向 B,但是依然保留了 C 添加跟踪的文件,此时会将这些文件放入暂存区中,显示为已缓存。同时工作区中修改的文件,显示为未缓存。

mixed 保持工作区不变,重置索引

当使用 git reset --mixed B 时,master 和 HEAD 指向 B,这时候 C 添加跟踪的文件仍然会在,但是会显示为未缓存(不是版本控制),而当前工作目录中的修改内容,仍然会在,显示未缓存的状态

(如果不知道怎么选,默认使用 mixed)

hard 重置索引和工作区(丢弃所有本地变更)

当使用 git reset --hard B 时,C 添加跟踪的文件,以及当前工作目录中的修改内容,都会丢失。


如果比较悲剧,分支历史上已经找不到想要的那个版本的代码了,但是别急,只要是有提交的代码,Git 都能找回来。

我在 Windows 下使用 TortoiseGit,只要右键找到显示引用记录,就能找到所有的操作记录,然后选择想要的版本,重置过去就可以了。即便是现在这一步的重置操作选错了版本也没事,因为这个操作也被记录下来,你还是可以重置到正确的版本。

看到这张图,是不是一股暖流涌上心头,终于找回来了。

曾经尝试过用命令来操作,但是试了很久都没成功,只好放弃,改用 TortoiseGit 来操作。TortoiseGit 在 Windows 下几乎是最好用的 Git GUI 工具了。

自从使用了 Git,只要有 commit 过的代码,再也不担心会丢了,尽情的 commit 吧。

Git 代码版本还原方法的更多相关文章

  1. git 代码托管使用方法

    Git代码托管 1 准备材料 在coding,github这些代码托管网站上申请一个账户. Linux平台什么需要一个git,如ubuntu 需要 $ sudo apt-get install git ...

  2. 搭建企业git代码版本管理所需工具

    此片文章纯属记录一下使用gitlab搭建私有git版本管理的一些工具及概念. 先记录一下概念 git         是一种版本控制系统,是一个命令,是一种工具 github   是一个基于git实现 ...

  3. git代码版本回退

    git log 用于查看我们修改提交的快照记录(commit记录),然后会有个commit修改记录的id编号,该命令显示从最近到最远的提交日志,我们可以看到3次提交记录,如下: git checkou ...

  4. git 代码版本回退

    1.查看 commit id 2.git reset --hard "dfdfdfdf" // commit id 3.git push -f -u origin 2.1.0 // ...

  5. git代码库误操作还原记录

    先做一些前情提要: 我们项目使用git作为代码管理,同时为了操作更方便,安装了乌龟git(tortoiseGit)工具.以下几乎所有操作都是在乌龟git上进行. 我们的项目是分阶段完成的,在完成上一阶 ...

  6. 【git】远程仓库版本回退方法

    1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回退版本? 如果提交了一个错误的版本到远程分支,怎么回退远程分支 ...

  7. [Git高级教程(二)] 远程仓库版本回退方法 - 梧桐那时雨 - CSDN博客

    1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回退版本? 如果提交了一个错误的版本到远程分支,怎么回退远程分支 ...

  8. IDEA中Git的更新/提交/还原方法

    记录一下在IDEA上怎样将写的代码提交到GitHub远程库: 下面这个图是基本的提交代码的顺序: 1. 将代码Add到stage暂存区本地修改了代码后,需先将代码add到暂存区,最后才能真正提价到gi ...

  9. 【技术博客】Git Flow模型管理代码版本

    参考GIT版本管理:Git Flow模型,在此基础上加入了自己的理解,增加人员分工和相应代码,并根据本次项目的实际情况进行相应修改. 在本学期的软件工程开发过程中,我们从alpha阶段就使用了git ...

随机推荐

  1. java设计模——反射的应用 (利用反射来去除if判断语句)

    利用反射来去除if判断语句 我的以前写的一个查分系统,就是部长让我写的那个,使用一个分发器(函数),他会根据传递进来的字符串参数调用不同的方. If(“add”.equalsIgnoreCase(fu ...

  2. L3-017 森森快递 (30 分)

    森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(编号.由于道路限制,第i号城市(,)与第(号城市中间往返的运输货物重 ...

  3. java1.8操作日期

    java1.8获取年份: int year = Calendar.getInstance().get(Calendar.YEAR); StringBuilder code = new StringBu ...

  4. Mysql监控调优

    提升性能 1.允许情况下,调大连接数 2.开启查询缓存(看命中率,用在变化不大的表内) 3.锁(查看是否存在死锁) 4.慢查询(将执行时间过长的语句写入日志内) 5.explain(分析表结构,typ ...

  5. Ionic 安装最新版本错误

    更新Ionic版本时 npm i -g ionic@latest 出现如下错误 npm ERR! Unexpected end of input at 1:14782 如下图 解决方法 使用如下命令: ...

  6. Angular 4.0 安装组件

    安装组件 ng g componet 组件名

  7. 【linux】Linux内存的free的真实含义

  8. 开始转型学习java

    什么编程语言这些都是一样的,编程思想都是一样的.只不过是表现形式. 标识符 每一个字符在ascll码表例都有对应的数字 所以字符和数字是可以相加的   'a'+1 也可以显示数字对应的字符   (ch ...

  9. 【JSP中引入文件】JSP中获取根路径+引用js文件

    在jsp界面中经常需要引入js.css等文件,通常都需要先获取项目根路径,然后再引入文件. 例如: 项目路径如下,需要在index.jsp中引入FusionCharts相关的js.css等: inde ...

  10. sublime快捷键功能记录

    shift+tab  向前缩进 ctrl+shift+k  删除当前行 菜单栏 view--side bar 选项 控制左侧文件展示视图 菜单栏“view”——“hideMiniMap” or &qu ...