本文介绍如何撤消上一次的Git提交的方法。

前言

有时,在使用Git时,您可能要撤消最新的提交。提交是给定时间的Git存储库的快照,Git有一个称为HEAD的引用变量,它指向当前工作分支中的最新提交,要撤消提交,只需将HEAD变量指向先前的快照即可。不建议撤消已将提交推送到共享存储库的提交。如果您只想更改提交消息,请查看本文。

Git三树架构

在Git中,您可以使用git reset命令和提交标识符来撤消更改。

git reset使用其他参数,使您可以控制命令行为。为了更好地了解重置的工作方式,我们来讨论一下Git的三棵不同的树,三树架构是Git管理系统的关键概念,它们之所以称为树,是因为它们代表文件的集合。

Git管理和操作以下三棵树:

1、工作目录-一个目录,包括与存储库关联的本地文件系统上的所有子目录和文件,它通常被称为“工作树(working tree)”,工作目录类似于沙箱,您可以在其中测试更改,然后再将其提交到暂存索引。

2、索引-此树跟踪使用git add添加到索引中的新文件或更改文件,这些文件将包含在下一次提交中,它通常称为“登台区域(staging area)”或“登台索引(staging index)”。

3、HEAD-指向当前分支上最后一次提交的指针。

git reset命令具有与三个树对应的三个参数:

1]、--soft-将HEAD指针更新为给定的提交,工作目录和索引不会更改。

2]、--mixed-更新HEAD指针,并将Index重置为指定的提交,工作目录保持不变,这是reset命令的默认操作模式。

3]、--hard-更新HEAD指针,并将Index和Working目录重置为指定的提交,使用此选项时要格外小心,因为所有您尚未提交的本地更改都会被覆盖并丢失。

撤消最后一次提交

要撤消上一次提交而不丢失对本地文件和索引所做的更改,请使用--soft选项和HEAD~1调用git reset:

git reset --soft HEAD~1

HEAD~1是指向先前提交的变量。上面的命令将当前分支后移一个提交,从而有效地撤消您的最后一个提交,如果您运行git status命令,则会看到已更改的文件被列为未提交的更改。

要更新HEAD指针以重置索引,请使用--mixed或不带选项运行git reset:

git reset --mixed HEAD~1

git reset HEAD~1

更改的文件会保留下来,但是与前面的示例不同,现在不会暂存更改以进行提交。

如果您不想保留对文件所做的更改,请使用--hard选项调用git reset命令:

git reset --hard HEAD~1

在执行硬重置之前,请确保您不再需要任何更改。

撤消多次提交

使用git reset,您可以返回到以前的任何提交。

例如,要将当前分支移回三个提交,可以使用:

git reset --hard HEAD~3

由于我们使用的是--hard,因此上面的命令将从提交历史记录中删除最新的三个快照。

移回特定提交的另一种方法是将提交ID传递给git reset命令。

使用git log --oneline查找提交ID:

git log --oneline

该命令将显示所有提交的列表,包括ID和提交消息的第一行:

32921222 (HEAD -> master) Update changelog

7505724c adding new tests

750862ce new blog post

95a63417 sort configuration file

252032e4 Refactor User class

...

一旦知道要重置的提交的ID,只需将ID传递给git reset命令即可:

git reset --hard 95a63417

结论

要撤消上一次提交,请使用git reset命令。不要重置推送的提交,因为这可能会给您带来很多问题。

相关主题

linux中如何撤销上次命令,使用git reset命令撤销上次Git提交相关推荐

  1. linux mv复制命令,linux中删除复制移动文件rm,mv,cp命令详解linux操作系统 -电脑资料...

    在linux中对文件的复制删除移动分别会使用到rm,mv,cp三个命令,下面我来给大家介绍一下rm,mv,cp命令对文件的常规操作吧, 先看实例 删除复制移动文件命令 Linux代码 rm -rf / ...

  2. linux mysql命令行导入_在linux中导入sql文件的方法分享(使用命令行转移mysql数据库)...

    因导出sql文件 在你原来的网站服务商处利用phpmyadmin导出数据库为sql文件,这个步骤大家都会,不赘述. 上传sql文件 前面说过了,我们没有在云主机上安装ftp,怎么上传呢? 打开ftp客 ...

  3. linux命令中插入制表符,linux 中grep 匹配制表符 和 换行符的命令

    linux 中grep 匹配制表符 和 换行符的命令 使用: [root@dhcp-9-79 ~]# grep $'\n' log.txt [root@dhcp-9-79 ~]# grep $'\t' ...

  4. git reset 命令详解(一)—— Git 学习笔记 07

    git reset 命令详解(一) 简而言之,git reset 命令是用来将当前 branch 重置到另外一个 commit 的,这个动作可能同时影响到 index 以及 work director ...

  5. git reset 命令详解(二)—— Git 学习笔记 08

    git reset 命令详解(二) 上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法--后面跟一个路径(或文 ...

  6. git reset命令详解

    开门见山,先抛出一张图,之后再细讲.  首先,先解释下图中的一些名词.  一.名词解释 1. Working Copy:当前工作目录下的文件,一般指,有修改,没有git add,没有git commi ...

  7. git reset 命令详解 git revert命令详解。

    git reset 命令详解 reset命令 介绍 参数 补救 git revert命令 revert说明 举例: 命令 reset命令 介绍 git reset 命令格式为: git reset [ ...

  8. git reset --hard --soft 与 git revert 的作用

    1.git reset --hard --soft 与 git revert 的作用: 文件从暂存区回退到工作区 版本回退 2.git简单的分为三个区域 : 1.工作区(working directo ...

  9. Linux中使用SecureCRT上传、下载文件命令sz与rz用法实例

    借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器 其中,对于sz和rz的理解与记忆我用了如下的方法(因为很多时候容易搞混): ...

最新文章

  1. 后序遍历的非递归算法python_刷题系列 - Python用非递归实现二叉树后续遍历
  2. 使用ECLIPSE制作可执行文件
  3. torch多维取数据
  4. vue 背景透明度_一款媒体小白喜爱的视频编辑软件,vue视频编辑APP,想学就来...
  5. -Wl,-rpath=
  6. ustc小道消息20211229
  7. 什么是节点光端机?总线型光端机有哪些优势?
  8. 第一章第一个c#程序上机_我从第一个#100DaysOfCode中学到的东西
  9. 快照是什么?揭秘存储快照的实现
  10. [c++]访MSN浮出窗口的示例
  11. 是时候好好去学门脚本语言了
  12. php过滤危险路径,PHP技巧:php过滤危险html代码
  13. 短时间让大家对C++ STL有所学习
  14. The content of the adapter has changed but ListView did not receive a notification
  15. 求解偏微分方程开源有限元软件deal.II学习--Step 4
  16. SkinSharp作者简述
  17. 固高运动控制卡IO口输入输出
  18. MySQL/PostgreSQL/Oracle到OceanBase数据迁移同步
  19. 软件工程专业职业规划发展路线
  20. 明星证券化之殇|一点财经

热门文章

  1. mysql 配置分区_Mysql的分区配置实验
  2. python不退出运行页面_如何在不完全退出Tkinter窗口的情况下停止正在运行的函数?...
  3. 织梦二次开发写php,PHP教程—DedeCMS二次开发(二)
  4. 虚拟服务器备案流程,国内虚拟主机备案流程
  5. php从session取数据乱码,如何解决php取不到session的值的问题
  6. python引入jit_从numba导入jit
  7. 树模型为什么是不能进行梯度下降
  8. distributed representations的意义
  9. java 错误日期转正确日期_Java日期格式转换-错误的月份
  10. 多线程可以使用计算机多核那,【多线程逻辑面试题】面试问题:异步操作的优缺… - 看准网...