linux中如何撤销上次命令,使用git reset命令撤销上次Git提交
本文介绍如何撤消上一次的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提交相关推荐
- linux mv复制命令,linux中删除复制移动文件rm,mv,cp命令详解linux操作系统 -电脑资料...
在linux中对文件的复制删除移动分别会使用到rm,mv,cp三个命令,下面我来给大家介绍一下rm,mv,cp命令对文件的常规操作吧, 先看实例 删除复制移动文件命令 Linux代码 rm -rf / ...
- linux mysql命令行导入_在linux中导入sql文件的方法分享(使用命令行转移mysql数据库)...
因导出sql文件 在你原来的网站服务商处利用phpmyadmin导出数据库为sql文件,这个步骤大家都会,不赘述. 上传sql文件 前面说过了,我们没有在云主机上安装ftp,怎么上传呢? 打开ftp客 ...
- linux命令中插入制表符,linux 中grep 匹配制表符 和 换行符的命令
linux 中grep 匹配制表符 和 换行符的命令 使用: [root@dhcp-9-79 ~]# grep $'\n' log.txt [root@dhcp-9-79 ~]# grep $'\t' ...
- git reset 命令详解(一)—— Git 学习笔记 07
git reset 命令详解(一) 简而言之,git reset 命令是用来将当前 branch 重置到另外一个 commit 的,这个动作可能同时影响到 index 以及 work director ...
- git reset 命令详解(二)—— Git 学习笔记 08
git reset 命令详解(二) 上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法--后面跟一个路径(或文 ...
- git reset命令详解
开门见山,先抛出一张图,之后再细讲. 首先,先解释下图中的一些名词. 一.名词解释 1. Working Copy:当前工作目录下的文件,一般指,有修改,没有git add,没有git commi ...
- git reset 命令详解 git revert命令详解。
git reset 命令详解 reset命令 介绍 参数 补救 git revert命令 revert说明 举例: 命令 reset命令 介绍 git reset 命令格式为: git reset [ ...
- git reset --hard --soft 与 git revert 的作用
1.git reset --hard --soft 与 git revert 的作用: 文件从暂存区回退到工作区 版本回退 2.git简单的分为三个区域 : 1.工作区(working directo ...
- Linux中使用SecureCRT上传、下载文件命令sz与rz用法实例
借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器 其中,对于sz和rz的理解与记忆我用了如下的方法(因为很多时候容易搞混): ...
最新文章
- 后序遍历的非递归算法python_刷题系列 - Python用非递归实现二叉树后续遍历
- 使用ECLIPSE制作可执行文件
- torch多维取数据
- vue 背景透明度_一款媒体小白喜爱的视频编辑软件,vue视频编辑APP,想学就来...
- -Wl,-rpath=
- ustc小道消息20211229
- 什么是节点光端机?总线型光端机有哪些优势?
- 第一章第一个c#程序上机_我从第一个#100DaysOfCode中学到的东西
- 快照是什么?揭秘存储快照的实现
- [c++]访MSN浮出窗口的示例
- 是时候好好去学门脚本语言了
- php过滤危险路径,PHP技巧:php过滤危险html代码
- 短时间让大家对C++ STL有所学习
- The content of the adapter has changed but ListView did not receive a notification
- 求解偏微分方程开源有限元软件deal.II学习--Step 4
- SkinSharp作者简述
- 固高运动控制卡IO口输入输出
- MySQL/PostgreSQL/Oracle到OceanBase数据迁移同步
- 软件工程专业职业规划发展路线
- 明星证券化之殇|一点财经
热门文章
- mysql 配置分区_Mysql的分区配置实验
- python不退出运行页面_如何在不完全退出Tkinter窗口的情况下停止正在运行的函数?...
- 织梦二次开发写php,PHP教程—DedeCMS二次开发(二)
- 虚拟服务器备案流程,国内虚拟主机备案流程
- php从session取数据乱码,如何解决php取不到session的值的问题
- python引入jit_从numba导入jit
- 树模型为什么是不能进行梯度下降
- distributed representations的意义
- java 错误日期转正确日期_Java日期格式转换-错误的月份
- 多线程可以使用计算机多核那,【多线程逻辑面试题】面试问题:异步操作的优缺… - 看准网...