当前位置: 首页 > news >正文

git add 撤销_Git中的各种后悔药

Git强大的撤销、版本回退功能,让我们在开发的过程中能够随意的回到任何一个时间点的状态,本文我们就来看看Git中的各种后悔药!

本文将从如下三个方面介绍Git中的后悔药:

1.工作区的代码想撤销
2.add到暂存区的代码想撤销
3.提交到本地仓库的代码想撤销

提交到远程仓库的后悔药我们统一都在关联远程仓库一文中讲解,敬请期待。

工作区的代码想撤销

可能有一天我正在写代码,写了很久发现写错了,想恢复到一开始的状态,一个笨办法就是把刚刚写的代码一行一行的删除,不过这种方式成本太高,我们可以通过git checkout -- <file>命令来撤销工作区的代码修改。如下图:

02ded816efe241e239cd9ff2c5de8fcb.gif

首先我们执行了git status命令,发现工作区是干净的,然后执行了cat命令,发现文件只有两行内容,然后通过vi编辑器向文件中添加一行,保存并退出,退出来之后又执行了git status命令,此时工作区的状态已经发生变化,然后我们执行了git checkout -- git01.txt命令,表示撤销之前的操作,让git01.txt恢复到之前的状态,该命令执行成功之后,我们再执行cat命令发现文件内容已经恢复了,此时再执行git status,状态也恢复了。

add到暂存区的代码想撤销

如果想要撤销,但是代码已经提交到暂存区了,不用担心,也能撤销,分两个步骤:

1.将暂存区的代码撤销到工作区
2.将工作区的代码撤销(具体操作和'工作区的代码想撤销'一致)

将暂存区的代码撤销,我们可以使用git reset HEAD命令来实现。如下图:

be8774990ccedadb60719d31ac1e65ce.gif

这里的代码都比较简单,核心的过程就是先执行git reset HEAD命令,从暂存区撤销,剩下的操作参考'工作区的代码想撤销'一节。

提交到本地仓库的代码想撤销

同样的,提交到本地仓库的代码一样也可以撤销,我们可以利用git reset --hard <版本号>命令来实现版本回退,该命令中的版本号有几种不同的写法:

1.可以使用HEAD^来描述版本,一个^表示前一个版本,两个^^表示前两个版本,以此类推。
2.也可以使用数字来代替^,比如说前100个版本可以写作HEAD~100。
3.也可以直接写版本号,表示跳转到某一个版本处。我们每次提交成功后,都会生成一个哈希码作为版本号,所以这里我们也可以直接填版本号,哈希码很长,但是我们不用全部输入,只需要输入前面几个字符即可,就能识别出来。

看下面一系列的操作:
1.通过git log查看当前提交日志:

a74ef04e81e606b0fe0aca9ebe764a25.png

2.通过git reset HEAD^^向前回退两个版本:

bea99809efe2c31dac9a25f776e1b5bc.png

3.查看日志,发现最后一次提交的版本号是695ce1fe,利用git reset --hard 695ce1fe命令回到回退之前的状态:

d42c8ea1fece63827cd689a5b9746e9c.png

4.通过git reset --hard HEAD~1回到上一个版本:

6f4ae112f45f059bf60e1ba41e2c0c2b.png

好了,Git中的后悔药我们就先介绍到这里,有问题欢迎留言讨论。

参考资料:

1.《GitHub入门与实践》
2.《Pro Git》

来源:思否

作者:江南一点雨

原文:https://segmentfault.com/a/1190000011910766

分布式版本控制Git详解

课程目标:通过本课程的学习,将全面掌握Git版本管理工具的配置与使用,以适应工作的需要。

适用人群:具有一定开发基础的开发人员。

课程概述:Git (读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linux 作者 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone)在本机上拷贝一个完整的Git仓库。

如果你正在为Git如何使用与配置管理发愁, 或者想要探索更有效率的代码版本管理方式, 那么该视频课程能帮你快速掌握这一技能,在本课程中,将为大家完整的阐述GIT工具的发展历史、GIT工具的使用、分支管理、远程仓库等。

07ba12e5f648693bd17d85737d64106a.png

环境参数:Git 2.16.2

课程链接:

分布式版本控制Git详解|Git视频课程 - 蛙课视频​www.wkcto.com
03019e53ae21210ce5df75dca162bd1d.png

相关文章:

  • python 爬取实时数据django显示_django+echart数据动态显示的例子
  • python获取安卓手机的屏幕_[Python]从安卓手机获取屏幕截图
  • rust编程之道 pdf_哪种编程语言又快又省电?有人对比了27种语言
  • python判断一个元素是否在列表中_python判断元素在列表中是否存在
  • python中的可视化工具_Python中常用的可视化工具 Matplotlib 简单入门
  • it项目经理带一个项目的完整_项目经理,一个完整的项目管理流程你做对了吗?...
  • dll 调用exe_盘点RUNDLL32.EXE的多种滥用方式及检测特征
  • python安装launcher要选吗_python的launcher用法知识点总结
  • 怎么用geany配置python_Geany中怎么配置python?
  • python判断按键是否按下_python怎样判断字典中的键是否存在
  • elasticsearch_Spring Boot 整合 Elasticsearch
  • java switch支持的数据类型_Java十四天零基础入门-Java关键字
  • flask框架_开发中Django和Flask框架的区别是什么?
  • 无法从命令行或调试器启动服务.必须首先_Emacs 调试秘籍之 GUD 调试器
  • googlenet网络结构_图像处理必读论文之五GoogLeNet-3
  • Apache Zeppelin在Apache Trafodion上的可视化
  • docker容器内的网络抓包
  • ES6之路之模块详解
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Git同步原始仓库到Fork仓库中
  • log4j2输出到kafka
  • Markdown 语法简单说明
  • MySQL主从复制读写分离及奇怪的问题
  • Nacos系列:Nacos的Java SDK使用
  • Objective-C 中关联引用的概念
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • ReactNativeweexDeviceOne对比
  • SQLServer之索引简介
  • 关于List、List?、ListObject的区别
  • 关于springcloud Gateway中的限流
  • 基于Android乐音识别(2)
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 试着探索高并发下的系统架构面貌
  • 项目实战-Api的解决方案
  • 小程序开发之路(一)
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 我们雇佣了一只大猴子...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (70min)字节暑假实习二面(已挂)
  • (SpringBoot)第二章:Spring创建和使用
  • (二)JAVA使用POI操作excel
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)计算机毕业设计ssm电影分享网站
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • ../depcomp: line 571: exec: g++: not found
  • .Net Core 中间件验签
  • .NET gRPC 和RESTful简单对比
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .net对接阿里云CSB服务
  • @Responsebody与@RequestBody
  • @synthesize和@dynamic分别有什么作用?
  • @Transactional类内部访问失效原因详解
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)