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 ...
随机推荐
- 《精通Spring4.X企业应用开发实战》读后感第六章(内部工作机制、BeanDefinition、InstantiationStrategy、BeanWrapper)
- IQA(图像质量评估)
图像质量评价(Image Quality Assessment,IQA)是图像处理中的基本技术之一,主要通过对图像进行特性分析研究,然后评估出图像优劣(图像失真程度). 主要的目的是使用合适的评价指标 ...
- TMF大数据分析指南 Unleashing Business Value in Big Data(二)
前言 此文节选自TMF Big Data Analytics Guidebook. TMF文档版权信息 Copyright © TeleManagement Forum 2013. All Righ ...
- SPI编程
#include <stdio.h>#include <wiringPi.h>#include <wiringPiSPI.h> int main(void){ un ...
- linux添加软件的service start/stop快捷服务(简单版)
首先我们先需要一款软件,例如“apache” 安装解压至相应目录“/home/aaa/apache” 开始操作:进入“/etc/init.d/”中,新建一个service服务运行脚本“tomcat”, ...
- [CentOS7] firewalld重启失败 Failed to start firewalld - dynamic firewall daemon.
错误信息: Failed to start firewalld - dynamic firewall daemon. 如图: 解决方法: 也就是kernel不支持现在的firewall防火墙的某些模块 ...
- Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)D(思维,DP,字符串)
#include<bits/stdc++.h>using namespace std;char c[2007][2007];char ans[4007];int s[2007][2007] ...
- HDP3.1 中 YRAN 和 MR2 的内存大小配置的计算方式
Container 是 YARN 中基本的处理单元,它是对内存.CPU等计算的封装.总的来说,每个core每块硬盘 分配2个 container,能获得较好的集群利用率. 1. 确定可用内存大小. 对 ...
- eclipse中项目已经启动,可是tomcat一直显示在启动中
一.异常描述 1. 在eclipse中启动tomcat,应用已经启动成功,但是tomcat仍然一直处于starting装填 二.分析原因 1. 更换8080端口为9080,启动tomcat,可以完整启 ...
- 2017-10-5 清北刷题冲刺班p.m
套路(拓扑排序) /* 对每个联通块单独考虑. 每个联通块是一个环套树,树边拎出来可以随意定向,记树边为 m,所以树的方案数为2^m . 对于环来说只有两种方向,顺时针和逆时针,记环边为 n,所以环的 ...