我们知道Git有三大区(工作区、暂存区、版本库)以及几个状态(untracked、unstaged、uncommited)

一、简介

Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。

git reset命令是git中重置命令,即用来撤销某次提交(commit)。首先,我们得了解,git reset可以帮我们重置哪些内容:

1、修改本地仓库中commit对象(快照)

如下图:

此时本地仓库对应的是commit4,git reset 可以让本地仓库对应的指针变为commit3或是commit1等之前的版本,当然,也可以变为commit4之后的某个commit,如commit5。
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。
备注:当使用git reset命令时候,一般会修改本地仓库。

其常用格式如下:

  • 用法一:git reset [-q] [] [--] ...
  • 用法二:git reset [--soft | --mixed | --hard | --merge | --keep ] [-q] [commit]

二、参数

参数说明 (git log和git reflog可查看commitId,commitId是快照的唯一标识)

  • --hard commitId 修改本地仓库、暂存区、工作区里面的数据为commitId对应快照的内数据

  • --mixed commitId 修改本地仓库、暂存区里面的数据为commitId对应快照里的数据,是git reset默认的参数,--mixed可缺省。 暂存区的数据会被快照中的数据覆盖


    这种情况是工作区没有,但暂存区有,所以提示修改未在暂存区(D表示delete)

  • --soft commitId 修改本地仓库里面的数据为commitId对应快照的数据。(仅改变指向快照的指针指向)

当git reset 后面的commitId为当前提交的commitId时,即HEAD(可缺省)。那么:

参数说明

  • --hard HEAD 修改暂存区、工作区里面的内容为当前快照里的内容。(这个很危险,曾经踩过坑,电脑的文件丢失了很多,也是导致我决心好好学一学git的原因,慎用)
  • --mixed HEAD 修改暂存区里面的内容为当前快照里的内容,是git reset默认的参数,因此可缺省。
  • --soft HEAD 本地仓库、暂存区、工作区都不改变 |

我们需要注意,使用git reset重置一般是很危险的,会彻底地丢掉历史。因为如果没有记录下重置前的commitId,一般不容易找回,除非分析.git/logs里面的日志,故重置需慎重。

git diff只对已被追踪的文件起作用,即已git add过,在暂存区有的

git commit -a -m只对已被追踪的文件起作用,

git撤销提交(commit)的更多相关文章

  1. git 撤销提交的文件

    一.问题 近期在使用git时遇到一个问题,就是在git上传文件时,将一个100兆的大文件添加到了git,并执行了push操作,这时在上传完毕后,会提示这个错误 Large files detected ...

  2. Git撤销提交和修改相关操作

    团队开发中经常遇到错误删除文件,错误提交等情况,那么使用Git该如何正确的进行撤销和恢复呢? 一.增补提交 git commit –C HEAD –a --amend -C表示复用指定提交的提交留言, ...

  3. git tag、gitignore和git撤销提交

    前言 最近在git的使用过程中遇到了一些新的问题,所以写下来方便自己回忆. git tag 打标签 git tag -a v1.00 -m "注释" git tag 打标签命令 - ...

  4. git撤销提交到remote的commit

    Reseting remote to a certain commit Assuming that your branch is called master both here and remotel ...

  5. Git撤销提交

    本文链接:http://volnet.github.io/#!docs/git/reset-to-old-version.md 在使用Git进行版本管理的时候,经常会遇到一些错误的提交. 在开始演示之 ...

  6. git撤销远程commit

    git reset --hard [commit_id] git push origin HEAD --force

  7. git 撤销远程 commit

    参考: https://blog.csdn.net/xs20691718/article/details/51901161 https://www.cnblogs.com/lfxiao/p/93787 ...

  8. git 只提交部分修改文件

    1.git status //查看修改文件状态 2.git add  //将想要提交的文件add到本地库 4.git status  //查看修改文件状态 3.git commit  //提交add到 ...

  9. Git 撤销所有未提交(Commit)的内容

    撸了好多代码,但是突然设计改了(~~o(>_<)o ~~):或者引入个第三方库,后来又发现用不着,想删掉,但文件太多了(比如几百个):那,怎么办呢,都不想了...Git 比人聪明,所以能很 ...

随机推荐

  1. [leetcode.com]算法题目 - Symmetric Tree

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  2. Android RelativeLayout wrap_content 而且 child view 使用 layout_alignParentBottom 时 RelativeLayout 高度会占满屏幕

    Android RelativeLayout wrap_content 而且 child view 使用 layout_alignParentBottom 时 RelativeLayout 高度会占满 ...

  3. Sublime Text3 实现在浏览器中以HTML格式预览md文件

    1.首先找到Package Control 打开Sublime Text3,找到菜单栏:Preferences → Package Control,没有找到Package Control,那么点击Pa ...

  4. python的datetime常用方法

    把datetime转成字符串 datetime.strftime("%Y-%m-%d-%H") 把字符串转成datetime datetime.strptime(datetime, ...

  5. (转)linux用户态和内核态理解

    原文:https://blog.csdn.net/buptapple/article/details/21454167 Linux探秘之用户态与内核态-----------https://www.cn ...

  6. 【从0到1学javascript】javascript数据结构----数组

    javascript中对数组的定义 数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可以是整数.这些数字索引在内部被转换成字符串类型.这是因为javascript对象中的属性名必须是字符 ...

  7. Apache Oltu 实现 OAuth2.0 服务端【授权码模式(Authorization Code)】

    要实现OAuth服务端,就得先理解客户端的调用流程,服务提供商实现可能也有些区别,实现OAuth服务端的方式很多,具体可能看 http://oauth.net/code/ 各语言的实现有(我使用了Ap ...

  8. 分享.NET 轻量级的ORM

    ORM https://github.com/StackExchange/dapper-dot-net http://fluentdata.codeplex.com/ https://github.c ...

  9. IdentityServer4 Hybrid 模式

    原文参考:Switching to Hybrid Flow and adding API Access back 接上篇:IdentityServer-Protecting an API using ...

  10. CentOS7运行Tomcat8时启动慢,访问总是转圈,但是过一会又好了

    我一开始遇到这个问题的时候也是懵逼的. 这叫什么问题... 描述一下,当输入命令启动tomcat之后,访问网站总是不能访问,但是5.6分钟之后又好了,有时候好,有时候不行. 遇到这样的问题运用以下的方 ...