git reset 命令用于回退版本,可以指定退回某一次提交的版本。
有三种命令方式

git reset [--soft | --mixed | --hard] [HEAD]

知识前提:git重要的三个工作区域:

  1. 工作区(Working Directory):写代码的目录。就是项目代码存放的目录(git add 之前的目录)。
  2. 暂存区(index/stage):工作区与版本库之间的缓冲地带。用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区,查看记录 git status
  3. 仓库区:git commit 提交到本地分支的,查看记录 git log

–mixed为默认的,可以不用带该参数

  1. 用于重置暂存区的文件,此时历史记录与上一次的提交(commit)保持一致,工作区文件内容保持不变(有上次修改的内容)。移动 HEAD 指针,改变暂存区内容,但不会改变工作区
  2. 原有文件内容的变更 :修改内容还在,变成未add的状态
  3. 目录结构的变更(增加或者删除文件):
    新增文件: 还存在,变成未add的状态(目录结构中文件变成红色,需要执行命令git add . 再执行git commit )
    删除文件:目录结构中还是没有,可以直接执行git commit

–soft用于回退到某个版本

  1. 仅仅移动当前 Head 指针,不会改变工作区和暂存区的内容
  2. 原有文件内容的变更 :修改内容还在,变成已add的状态(未commit)
  3. 目录结构的变更(增加或者删除文件):
    新增文件:还存在,变成已add的状态(目录结构中文件变成绿色,可以再次执行git commit );
    删除文件:目录结构中还是没有,可以直接执行git commit

–hard 参数撤销工作区中所有未提交的修改内容,

  1. 将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交,当前 HEAD 指针、工作区和暂存区内容全部改变
  2. 原有文件内容的变更 :修改内容丢失(修改的代码不会变成未add的状态)
  3. 目录结构的变更(增加或者删除文件):新增文件丢失、删除的文件相当于没删

使用场景

–mixed

1 使用完 reset --mixed 后,执行 git add 将这些改变过的文件內容加入 暂存区(index)中,再执行 git commit 将 Index 暂存区中的內容提交至仓库( Repository )中,这样一样可以达到合并 commit 节点的效果
2 也可以用于发现add错误了,可以执行git reset HEAD来重置暂存区(index)的文件

–soft

1 使用完reset --soft后,commit_id之后提交的内容会被放入暂存区(index)中,此时已经add了,可以直接执行commit,将commit_id之后的提交作为一个commit来统一进行提交,减少不必要的log记录

–hard

1 使用 git reset --hard HEAD(HEAD也可以是某个commit_id) 来强制恢复 git 管理的文件夹的內容及状态;此时目标节点(commit_id)后的所有提交都会被删除

 git log // 查询要回滚的 commit_id// 这里的commit_id是当前提交错误的想要撤回的commit之前的那个正确的commit// 执行前,先将本地代码切换到对应分支git reset --hard commit_id // HEAD 就会指向这个commit_id的提交记录git push origin HEAD --force // 强制推送到远端

这种操作存在一个问题,服务器上的代码虽然被还原了,但假如有多个人在这个分支上开发,他们本地的版本依然是比服务器上的版本高的,所以,别人再重新提交(push)代码的话,你撤销的操作又会被重新,你上面的操作也就白操作了。解决办法是,让别人把本地的分支先删掉,然后重新从服务器上拉取分支,或者你在对方提交完所有本地代码之后对方没有再进行修改代码,这个时候你提交了,发现你提交的有问题,再进行reset操作,然后让对方拉取(pull)最新的代码也ok,最主要的就是对方本地没有你要reset的代码即可
2 误删恢复
如果回滚代码之后发现复制错了 commit_id,或者误删了某次 commit 记录,也可以通过下方代码恢复:

git relog // 复制要恢复操作的前面的 hash 值
git reset --hard hash // 将 hash 换成要恢复的历史记录的 hash 值

git的使用——reset相关推荐

  1. Git操作:reset

    Git 操作:reset 在了解reset的用法前,建议读者需首先明晰git仓库的结构(working tree,index,local repository)官方文档中这样定义:git-reset ...

  2. git revert和reset区别

    1.在github上建立测试项目并克隆到本地 2.本地中新建两个文本文件 3.将a.txt commit并push到远程仓库 执行 git add a.txt, git commit -m " ...

  3. git回滚 reset 之后如何恢复到之前状态

    history 查看记录 基础用法 git log commit 6dbaadad9d701c commit 之后的就是hash值 一行用法 git log --oneline a dog 用法 st ...

  4. git回滚reset到指定分支

    在git中我们经常会遇到提交代码之后需要进行回滚的操作,可以通过git reset 命令进行回滚. 首先找到需要回滚到的提交的commit id ,然后通过: git reset --hard 老的c ...

  5. Git笔记-Connection reset by 13.229.188.59 port 22 fatal: Could not read from remote repository.

    这个问题发送在突然的某一天,我使用git push上传不了自己的代码到仓库了如下图所示: 这里用如下的方式解决这个问题: ssh-kyegen -t rsa -C "GitHub的用户名&q ...

  6. Git之深入解析工作流程、常用命令与Reset模式分析

    一.Git 工作流程 ① 工作区域 四个区: Workspace:工作区 Index / Stage:暂存区(和 git stash 命令暂存的地方不一样) Repository:仓库区(或本地仓库) ...

  7. git reset后本地拉取_一份值得收藏的 Git 异常处理清单

    ? 这是第 54篇不掺水的原创,想要了解更多,请戳上方蓝色字体:政采云前端团队关注我们吧- 本文首发于政采云前端团队博客:一份值得收藏的 Git 异常处理清单 https://www.zoo.team ...

  8. Git之Reset的三种模式

    前言 使用场景:当commit的内容有错误,需要回撤到之前的某个版本时. git reset一句话概括: git-reset - Reset current HEAD to the specified ...

  9. git reset简介

    本文编辑整理自:http://guibin.iteye.com/blog/1014369 http://hi.baidu.com/tiger_tnt/blog/item/a0464ffa6a8115d ...

最新文章

  1. 火爆GitHub的《机器学习100天》,有人把它翻译成了中文版
  2. Redis的两种消息模式
  3. 基于Proteus的计算器仿真
  4. 区块链世界中的IOTA:它是什么样的存在?
  5. object-c 队列
  6. winform技巧一,errorprovider,任务栏可见,总在最前
  7. TPC-H生成Spark测试用的伪数据集(转载)
  8. 电脑如何设置终端设置代理_如何设置一个严肃的Kubernetes终端
  9. js如何上传大文件到服务器,js将文件上传到远程服务器
  10. 数据预处理第1讲:标准化
  11. 从0.5到1写个rpc框架 - 2:远程服务调用(grpc)
  12. Jira迁移及内存调整
  13. php5apache2.dll,Apache2.2.8 + PHP5.2.5不能加载php5apache2.dll
  14. SQL 语言特点、功能和数据类型
  15. 34个漂亮的应用程序后台管理界面分享
  16. Safe Browsing
  17. FPGA可以转行数字IC验证吗?
  18. 数字IC常考题(单选、多选、编程)
  19. 6款相见恨晚的资源网站,每个都百里挑一,送给正需要的你!
  20. mysql-connector-java详解

热门文章

  1. 粉笔公考——判断推理
  2. leaflet蜂巢图(leaflet篇.15)
  3. MySQL COUNT(*) 和 COUNT(1) 比较
  4. java批量添加文件到ZIP压缩包并下载,文件名相同导致的异常
  5. VirtualBox下Centos7安装增强功能
  6. android跳过网络连接,绕过Android Android的Wi-Fi热点5设备连接限制 | MOS86
  7. JavavEE中网络编程Socket套接字Ⅱ(TCP)
  8. 大数据技术基础实验十三:Kafka实验——订阅推送示例
  9. UVA 167(The Sultan's Successors)八皇后回溯
  10. 程序员都应该学学怎么表达