Git撤销&回滚操作(git reset 和 get revert)

2023-05-16

git 工作流:

工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。

暂存区:已经 git add xxx 进去,且未 git commit xxx 的。

本地分支:已经git commit -m xxx 提交到本地分支的。
这里写图片描述


代码回滚

在上传代码到远程仓库的时候,不免会出现问题,任何过程都有可能要回滚代码:

1、在工作区的代码

git checkout -- a.txt   # 丢弃某个文件,或者
git checkout -- .       # 丢弃全部

注意:git checkout – . 丢弃全部,也包括:新增的文件会被删除、删除的文件会恢复回来、修改的文件会回去。这几个前提都说的是,回到暂存区之前的样子。对之前保存在暂存区里的代码不会有任何影响。对commit提交到本地分支的代码就更没影响了。当然,如果你之前压根都没有暂存或commit,那就是回到你上次pull下来的样子了。

2、代码git add到缓存区,并未commit提交

git reset HEAD .  或者
git reset HEAD a.txt

这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化

3、git commit到本地分支、但没有git push到远程

git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>  # 回到其中你想要的某个版
或者
git reset --hard HEAD^  # 回到最新的一次提交
或者
git reset HEAD^  # 此时代码保留,回到 git add 之前

4、git push把修改提交到远程仓库
1)通过git reset是直接删除指定的commit

git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>
git push origin HEAD --force # 强制提交一次,之前错误的提交就从远程仓库删除

2)通过git revert是用一次新的commit来回滚之前的commit

git log # 得到你需要回退一次提交的commit id
git revert <commit_id>  # 撤销指定的版本,撤销也会作为一次提交进行保存

3) git revert 和 git reset的区别
- git revert是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留;
- git reset是回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除

开发过程中,你肯定会遇到这样的场景:

场景一:

糟了,我刚把不想要的代码,commit到本地仓库中了,但是还没有做push操作!

场景二:

彻底完了,刚线上更新的代码出现问题了,需要还原这次提交的代码!

场景三:

刚才我发现之前的某次提交太愚蠢了,现在想要干掉它!

撤销

上述场景一,在未进行git push前的所有操作,都是在“本地仓库”中执行的。我们暂且将“本地仓库”的代码还原操作叫做“撤销”!

情况一:文件被修改了,但未执行git add操作(working tree内撤销)


 
 
  1. git checkout fileName
  2. git checkout .

情况二:同时对多个文件执行了git add操作,但本次只想提交其中一部分文件


 
 
  1. $ git add *
  2. $ git status
  3. # 取消暂存
  4. $ git reset HEAD <filename>

情况三:文件执行了git add操作,但想撤销对其的修改(index内回滚)


 
 
  1. # 取消暂存
  2. git reset HEAD fileName
  3. # 撤销修改
  4. git checkout fileName

情况四:修改的文件已被git commit,但想再次修改不再产生新的Commit


 
 
  1. # 修改最后一次提交
  2. $ git add sample.txt
  3. $ git commit --amend -m "说明"

情况五:已在本地进行了多次git commit操作,现在想撤销到其中某次Commit

git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]
 
 

具体参数和使用说明,请查看:Git Pro深入浅出(二)中的重置揭秘部分

回滚

上述场景二,已进行git push,即已推送到“远程仓库”中。我们将已被提交到“远程仓库”的代码还原操作叫做“回滚”!注意:对远程仓库做回滚操作是有风险的,需提前做好备份和通知其他团队成员!

如果你每次更新线上,都会打tag,那恭喜你,你可以很快的处理上述场景二的情况

git checkout <tag>
 
 

如果你回到当前HEAD指向

git checkout <branch_name>
 
 

情况一:撤销指定文件到指定版本


 
 
  1. # 查看指定文件的历史版本
  2. git log <filename>
  3. # 回滚到指定commitID
  4. git checkout <commitID> <filename>

情况二:删除最后一次远程提交

方式一:使用revert


 
 
  1. git revert HEAD
  2. git push origin master

方式二:使用reset


 
 
  1. git reset --hard HEAD^
  2. git push origin master -f

二者区别:

  • revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在;
  • reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。

情况三:回滚某次提交


 
 
  1. # 找到要回滚的commitID
  2. git log
  3. git revert commitID

删除某次提交

git log --oneline -n5
 
 

Git撤销&回滚操作-log

git rebase -i "commit id"^
 
 

注意:需要注意最后的^号,意思是commit id的前一次提交

git rebase -i "5b3ba7a"^
 
 

Git撤销&回滚操作-rebase

在编辑框中删除相关commit,如pick 5b3ba7a test2,然后保存退出(如果遇到冲突需要先解决冲突)!

git push origin master -f
 
 

通过上述操作,如果你想对历史多个commit进行处理或者,可以选择git rebase -i,只需删除对应的记录就好。rebase还可对 commit 消息进行编辑,以及合并多个commit。

原始博客: https://blog.csdn.net/asoar/article/details/84111841

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git撤销&回滚操作(git reset 和 get revert) 的相关文章

  • wget与代理设置

    1 在bash shell中设定代理 basrhc export http proxy 61 34 166 111 53A 167 3128 34 export ftp proxy 61 34 166 111 53A 167 3128 34
  • canvas setInterval 定时器 循环轮播 越执行越快,顺序混乱---实例解析

    实际开发中 xff0c 小X在写一个canvas原生小游戏时 xff0c 遇到一个问题 xff0c 要实现一个海水流动的效果 xff0c 一个主背景下有四张图片进行循环轮播 xff08 轮播其实就是去更换小图的src xff0c 当更换的频
  • 云计算究竟有哪些优势?未来发展趋势又是怎样的呢?

    云计算的优势主要包括以下几个方面 xff1a 灵活性 xff1a 云计算提供了灵活的服务和资源管理 xff0c 用户可以根据实际需求随时调整服务的规模和配置 xff0c 避免了硬件资源浪费和过度采购的问题 成本效益 xff1a 云计算提供的
  • “裸奔”时代下,我们该如何保护网络隐私?

    当我们在互联网上进行各种活动时 xff0c 我们的个人信息和数据可能会被攻击者窃取或盗用 为了保护我们的隐私和数据安全 xff0c 以下是一些实用的技巧和工具 xff0c 可以帮助您应对网络攻击 数据泄露和隐私侵犯的问题 xff1a 使用强
  • CAS 安装配置

    1 从github上获取 https github com apereo cas overlay template 2 shell窗口构建脚本 右键 xff0c 进入shell 当前目录下运行 build cmd run 3 当出现端口被占
  • micropython 8266 驱动 12864G 液晶LCD屏幕

    1 xff0c 接线顺序 引脚定义 cs 61 Pin 4 片选 reset 61 Pin 5 复位 rs 61 Pin 16 数据 指令 1数据 0 指令 DC sda 61 Pin 13 数据信号 sck 61 Pin 14 时钟信号
  • 【软件工程】之结构化分析

    结构化分析 6 1引言6 2结构化分析建模6 3面向数据流的建模方法6 4面向数据的建模方法6 5面向状态的建模方法6 6思考题1 结构化分析的特点2 数据流图的建模元素3 数据字典 结构化需求分析的建模方法 xff1a 面向数据流的建模方
  • 在 Linux 下用 mkdir 命令来创建目录和子目录

    了解了用 ls 命令在目录中列出条目后 xff0c 现在我们要学习在 Linux 系统下创建目录 在 Linux 下 xff0c 我们可以使用 mkdir命令 Mkdir 是 make directory 的缩写词 mkdir 是什么呢 M
  • win10下删除ubuntu及其引导项

    本文主要针对UEFI和GPT双系统下Ubuntu EFI分区及启动项的删除 1 查看电脑分区信息 电脑分区信息如我上一篇博客所示 xff0c 打开win10磁盘管理器 xff0c 可以看到相应分区信息 xff0c 具体如下图 根据个人分区方
  • STM32F1,F4,L1系列禁止JTAG和SW引脚方法

    STM32F1系列 程序中在使用到JTAG SWD的某个IO 时 xff0c 需要禁用掉相关调试方法后 xff0c 再配置相应的IO方式 在需要相应的接口配置前使用这些代码 对于F1系列 xff0c 调用函数进行专门的禁止 标准库配置方式
  • 数据库关系代数思维导图

  • 关于树莓派VNC图形登录界面重复登录,并显示can not show the desktop的解决办法。

    最近我也遇到了这么一个烦人的问题 xff0c 就是树莓派一直重复登录都登不进去 首先介绍一下背景 xff0c 我用树莓派的官方镜像烧录工具重新烧录了我之前的备份 xff0c 但是发现putty可以远程登录到pi 而使用vnc远程登录无法登录
  • Ubuntu开机进入终端完成自救

    由于设置了etc下的关键配置 xff0c 导致系统一直卡在开机界面进不到系统桌面 xff0c 所以记录下自救的过程 1 重启开机后选择Ubuntu高级选项 xff0c 然后点击带有Recover的 xff0c 再点击Drop to root
  • 女生写的如何追mm.看完后嫩头青变高手

    我是女生 xff0c 看到有的男生想追自己喜欢的女孩子又不敢追 xff0c 还想人家倒追她 xff0c 我很反感 从一个女生的角度 xff0c 我比较了解女孩子的心理 女孩子大多不会主动出击 xff0c 去追求自己喜欢的男孩 xff0c 除
  • 使用Dockerfile创建docker镜像

    在Dockerfile中用到的命令有 FROM FROM指定一个基础镜像 xff0c 一般情况下一个可用的 Dockerfile一定是 FROM 为第一个指令 至于image则可以是任何合理存在的image镜像 FROM 一定是首个非注释指
  • Ubuntu下软件更新无法安装的问题

    Ubuntu安装软件提示 需要安装不能信任的软件包 解决办法 用 Ubuntu 安装输入法软件包时提示 需要安装不能信任的软件包 xff0c 这个动作需要从没有授权的软件源来安装软件包 xff0c 赋予权限执行仍然无法安装 xff0c 上网
  • 【C#】C#中FTP的操作

    C 完成与FTP服务器交互的功能代码 包括连接FTP 上传文件 下载文件 创建文件夹 删除文件夹 目录列表 获取指定文件大小 对文件的重命名 移动文件 判断路径是否存在等功能 using System using System Collec
  • 深浅层特征融合——CBNet

    写在前面 本系列博客 深浅层特征融合 对几篇出现较新的深浅层特征融合算法进行简要介绍 xff0c 多为本人的论文笔记 xff0c 记录了一个深度学习小学生在看论文时想到的问题 论文题目 xff1a CBNet A Novel Composi
  • U盘安装mips架构的Deepin(或UOS)系统及配置适用的源

    安装环境 请确保您的电脑满足以下的配置要求 xff0c 如果您的电脑配置低于以下要求 xff0c 将无法完美地体验深度操作系统 xff1a 内存 xff1a 至少 2G 内存 RAM xff0c 4G 以上是达到更好性能的推荐值硬盘 xff
  • label smooth方法论文调研

    待看论文 xff1a When Does Label Smoothing Help xff08 重点要看的 xff09 Regularizing Neural Networks by Penalizing Confident Output

随机推荐