我们在使用git进行版本管理的时候,如果遇到需要回退代码的情况,一般会用 git reset 命令,不过这个命令还有几个参数,这篇文章就来详解一下。

先来了解一下 git 大致的工作流程,配合这张图会比较容易讲清楚

首先,想象一下,我正在写着我的代码,这个状态对应图中的 Working diretory, 
这个时候,我的代码还就是我的,跟 git 半毛钱关系都没有。(在Android Studio中对应文件颜色是红色)

然后,我把当前编辑的 A 文件 add 到 git 中,这个时候就跟 git 发生了关系,git 接受了我的代码,然后把这个文件存入了自己的暂存区,后面我对这个文件的更改 ,git 都会知晓。这个状态对应图中的 Stage/Index(在Android Studio中对应文件颜色是绿色或者蓝色)

我把写好的 A 文件 commit 到 git ,这就有了一次提交历史。对应图中的 History,在 git 中只要 commit 过的文件,都有各种方式可以恢复,基本来说,就是不会丢了(在Android Studio中对应文件颜色是白色)

好的,那么现在,我发现代码写的不好,需要回退到上一次的提交,我有几个命令可以选择。

常见以下三个命令:

git reset --hard

git reset --soft

git reset --mixed

1.git reset --hard

这个命令 非常危险 ,是 git 中少有的几个会丢失信息的操作。它会把回退点之前的所有信息都删掉,一个不留,干干净净。 
举个例子: 
现在我把 A 文件修改了两次,到了 C 状态 ,并且已提交。 
那么我的分支指针是指向 C , 当前文件编辑的状态也是在 C

   (F)
A-B-C

master
  • 1
  • 2
  • 3
  • 4

我输入了git reset --hard,结果会变成:

 (F)
A-B

master
  • 1
  • 2
  • 3
  • 4

对的, C 状态彻底没有,再也找不回来。所以,没事不要用这个命令。

2.git reset --soft

同样是这个状态:

   (F)
A-B-C

master
  • 1
  • 2
  • 3
  • 4

我输入了git reset --soft,结果是:

 (F)
A-B-C

master
  • 1
  • 2
  • 3
  • 4

文件状态与分支的指针都指向上一个提交,C 还是在的,只是没显示。

3.git reset --mixed

还是这个场景:

   (F)
A-B-C

master
  • 1
  • 2
  • 3
  • 4

我输入了 git reset --mixed,结果是:

   (F)
A-B-C

master
  • 1
  • 2
  • 3
  • 4

分支指针指向上次提交点,但是文件状态还是在当前文件 C ,我看到的现象就是 C 文件还在,但是没有 add ,是红色的。 
可以看出,三个命令中 mixed 是最好的回退处理方式,其实这也是 git reset 的默认参数。

好了,本篇到此结束,可能还会更新。 
如果有错的地方,还请留言。

git reset命令学习的更多相关文章

  1. 【Git 学习三】深入理解git reset 命令

    重置命令(git reset)是Git 最常用的命令之一,也是最危险最容易误用的命令.来看看git reset命令用法. --------------------------------------- ...

  2. git reset命令使用

    版本回退 当前有三个commit提交版本commit1commit2commit3Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本上一个版本是HEAD^,上上一个版本是HEAD^^ ...

  3. Git常用命令学习(2)

    1):git branch -v --查看每一个分支的最后一次提交2):git branch --merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分 ...

  4. GIT 版本控制命令学习

    一   基本命令 1.$ git init 要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行: 2.$ git status 检查当前文件状态 3.git add命令 功能1:可以 ...

  5. git常用命令学习笔记

    安装好git之后即可使用git来管理项目了,鼠标右键点击 git bash出现命令黑窗口,接下来执行git指令即可. https://git-scm.com/book/zh/v2 以下整理了git常用 ...

  6. Git 常用命令学习

    本文转载自:https://buptldy.github.io/2016/03/02/2016-03-02-Git%20Cheat%20Sheet/ 文章 创建版本库 初始化一个Git仓库,使用git ...

  7. Git基础命令学习

    Git是项目代码管理软件 主要管理逻辑如下: 所有代码保存在远程,本地获取远程代码保存在本地仓库,并于本地工作目录修改代码 修改完成后,提交到本地暂存区,添加必要注释,再尝试提交到远程仓库 若发生冲突 ...

  8. git常用命令学习配详细说明

    原文链接 把当前目录变成Git可以管理的仓库 git init 查看仓库当前的状态 git status 添加新/变动文件 git add <文件名> // 添加某个新文件(目录) git ...

  9. git 基础命令 学习总结

    首先介绍一个git 里工作流的概念: 你的本地仓库由 git 维护的三棵“树”组成.第一个是你的 工作目录,它持有实际文件:第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动:最后是 H ...

随机推荐

  1. R: 数据结构、数据类型的描述。

    ################################################### 问题:数据结构..类型  18.4.27 有哪些数据结构.类型??  各自有什么特点? 解决方案 ...

  2. if if 和 if elif 的区别

    再一次编程中意外使用了if if 也实现了 if elif的功能,所以搜索了下其中的区别: 1.if if 和 if elif 是有区别的,只是在某些情况下才会一样的效果: 2.随意使用会导致意外的错 ...

  3. Linux 启动顺序

    Linux 启动顺序:1. BIOS自检2. 运行系统内核并检测硬件3. 运行系统的第一个进程init4. init读取系统引导配置文件/etc/inittab中的信息进行初始化            ...

  4. 使用 Node.js 实现简单的 Webhook

    距离 Node.js 这个东西出来已经过了好久了,感觉现在的前端如果不会点 Node.js 就有点太落后于时代啦.我接触它是从去年暑假开始的,当时在写一个比较神奇的东西,就顺便接触了一下.虽然网传 n ...

  5. CSS学习系列3--CSS3中的box-shadow的使用

    在CSS中,text-shadow是给文本添加阴影效果. box-shadow则是给元素块添加周边阴影效果. box-shadow基本的语法形式如下 box-shadow: [inset] x-off ...

  6. JavaScript学习系列3 -- JavaScript arguments对象学习

    在实际项目开发中,目前还是很少使用到JavaScript 中的arguments对象,那么它到底是干什么用的呢 arguments是JavaScript中的一个类数组对象,它代表传给一个正在执行的函数 ...

  7. Codeforces Round #179 (Div. 2) B. Yaroslav and Two Strings (容斥原理)

    题目链接 Description Yaroslav thinks that two strings s and w, consisting of digits and having length n  ...

  8. Kolla Ocata版本安装及镜像制作流程

    1.关闭宿主机firewalldsystemctl disable firewalldsystemctl stop firewalld 2.配置selinux为disable,否则创建的实例网络不通临 ...

  9. libguestfs知识点

    libguestfs 是一组 Linux 下的 C 语言的 API ,用来访问虚拟机的磁盘映像文件.其项目主页是http://libguestfs.org/ , 该工具包内包含的工具有virt-cat ...

  10. 使用java画一张海报

    PS: 没找到合适的海报背景,就随便找了一张,使用技术都是相同的 1. 添加依赖 这俩其实跟本章节的核心技术没有关系,是为了获取QQ昵称和QQ头像而引入的. <!-- jsoup --> ...