git reset命令学习
我们在使用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命令学习的更多相关文章
- 【Git 学习三】深入理解git reset 命令
重置命令(git reset)是Git 最常用的命令之一,也是最危险最容易误用的命令.来看看git reset命令用法. --------------------------------------- ...
- git reset命令使用
版本回退 当前有三个commit提交版本commit1commit2commit3Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本上一个版本是HEAD^,上上一个版本是HEAD^^ ...
- Git常用命令学习(2)
1):git branch -v --查看每一个分支的最后一次提交2):git branch --merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分 ...
- GIT 版本控制命令学习
一 基本命令 1.$ git init 要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行: 2.$ git status 检查当前文件状态 3.git add命令 功能1:可以 ...
- git常用命令学习笔记
安装好git之后即可使用git来管理项目了,鼠标右键点击 git bash出现命令黑窗口,接下来执行git指令即可. https://git-scm.com/book/zh/v2 以下整理了git常用 ...
- Git 常用命令学习
本文转载自:https://buptldy.github.io/2016/03/02/2016-03-02-Git%20Cheat%20Sheet/ 文章 创建版本库 初始化一个Git仓库,使用git ...
- Git基础命令学习
Git是项目代码管理软件 主要管理逻辑如下: 所有代码保存在远程,本地获取远程代码保存在本地仓库,并于本地工作目录修改代码 修改完成后,提交到本地暂存区,添加必要注释,再尝试提交到远程仓库 若发生冲突 ...
- git常用命令学习配详细说明
原文链接 把当前目录变成Git可以管理的仓库 git init 查看仓库当前的状态 git status 添加新/变动文件 git add <文件名> // 添加某个新文件(目录) git ...
- git 基础命令 学习总结
首先介绍一个git 里工作流的概念: 你的本地仓库由 git 维护的三棵“树”组成.第一个是你的 工作目录,它持有实际文件:第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动:最后是 H ...
随机推荐
- Linux系统挂载FAT32的U盘
1:将U盘插入USB接口,检查是否插好 2:用fdisk命令检查分区和USB设备信息 [root@yhwang ~]# fdisk -l Disk /dev/sda: 1000.2 GB, 10002 ...
- Android Market google play store帐号注册方法流程 及发布应用注意事项
Android Market google play store帐号申请 注册方法流程 在 Google Play 中发布软件之前,您需要完成以下三项工作: 创建开发人员个人资料 接受开发人员分发协议 ...
- hello markdown
目录 标题 标题1 标题2 标题3 有序列表 无序列表 插入图片 插入链接 粗体.斜体.删除线 引用 表格 代码 目录 新的开始 希望能够坚持下去 cnblogs也支持markdown 之前看了写ma ...
- 以后尽量不用cin、cout啦
cout输出有问题(对于double,不同OJ处理的结果不一样),cin读入机制较scanf繁琐.慢!!!!!!!!
- unity3d 刷新速率
using UnityEngine; using UnityEngine.UI; public class Text : MonoBehaviour { public Text t; private ...
- FreeSql 新功能介绍:贪婪加载五种方法
前言 FreeSql 在经过6个月的开发和朋友们的工作实践,不断的改进创新,目前拥有1500个左右单元测试方法,且每个方法内又复盖不同的测试面. 今天介绍 FreeSql 各种贪婪加载的姿势,作下总结 ...
- bzoj 3722: PA2014 Final Budowa
3722: PA2014 Final Budowa Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 303 Solved: 108[Submit][St ...
- 洛谷P1932 A+B A-B A*B A/B A%B Problem
P1932 A+B A-B A*B A/B A%B Problem 题目背景 这个题目很新颖吧!!! 题目描述 求A.B的和差积商余! 由于数据有修改,减法运算结果可能带负号! 输入输出格式 输入格式 ...
- Jenkins+maven+gitlab+shell实现项目自动化部署
确认jdk , maven,git这些已经在服务器上搭建成功,gitlab使用的是公司服务也没有进行搭建 下面是jenkins的两种搭建方式 1. 第一种比较简单下载对应jenkins.wa ...
- python绘制世界人口地图
最近看了<python编程:从入门到实践>,里边设计的项目拿来学习学习,绘制世界人口地图. 首先,下载数据,http://data.okfn.org/ ,从这里下载population_d ...