Git中的各种后悔药

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

本文是Git系列的第三篇,了解前面的文章有助于更好的理解本文:


1.Git概述
2.Git基本操作


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

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

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

工作区的代码想撤销

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

图片描述

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

add到暂存区的代码想撤销

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

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

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

图片描述

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

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

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

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

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

图片描述

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

图片描述

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

图片描述

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

图片描述

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

参考资料:

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

更多JavaEE和Git资料请关注公众号:

图片描述

《Spring Boot+Vue全栈开发实战》作者

8.2k 声望
7.1k 粉丝
0 条评论
推荐阅读
为什么我们的微服务中需要网关?
玩过微服务的小伙伴对 Spring Cloud 中的的 Spring Cloud Gateway 多多少少都有一些了解,松哥之前既写过相关的文章,也录过相关的视频跟小伙伴们介绍 Spring Cloud Gateway,不过在之前的介绍中,我可能更加侧重...

江南一点雨阅读 330

封面图
Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...

王中阳Go5阅读 2.1k评论 2

封面图
Git 入门与实践
Git 入门与实践推荐:猴子都能懂的 GIT 入门Git --everything-is-loca 官方文档Git 教程-廖雪峰Git 的使用方式有很多。图形化 —— 小乌龟(Tortoise Git )、命令行—— git bash、IDE 集成等 ......目录1. 基础配置...

RainBow1阅读 2.2k

git patch常用方法
针对指定的commit range生成patch,默认对每一个commit分别单独生成patch文件。patch文件按照commit的先后顺序从1开始编号。patch文件会生成到当前目录下。

黑暗森林1阅读 13.1k评论 1

openSSH升级公钥失效Permission denied (publickey)解决方案
背景centos系统升级openSSH后,服务器上无法再拉取代码,报错如下:原因服务器重新安装SSH后公钥改变,需要重新安装ssh-keygen -t rsa -C "邮箱地址"生成公钥,删除gitlab原有公钥,但是git pull依然报错如下:依...

兰俊秋雨1阅读 1.2k

Git 分支管理策略汇总
我大概说了一些规则,但仔细想来,好像也并没有形成一个清晰规范的流程。所以查了一些资料,总结出下面这篇文章,一共包含四种常见的分支管理策略,分享给大家。

alwaysbeta3阅读 901

封面图
SegmentFault 思否技术周刊 Vol.78 — Git 必看技术补给
Git 的诞生是一个非常有趣的故事。1991年 Linus 开源了 Linux 内核,无数 Linux 爱好者在世界各地为 Linux 编写代码,那么问题来了,这些代码该如何管理呢?起初 Linus 使用 BitKeeper(BitMover 公司的版本控制软...

Beverly2阅读 1.1k

封面图

《Spring Boot+Vue全栈开发实战》作者

8.2k 声望
7.1k 粉丝
宣传栏