首页 > 其他分享 >git 回滚操作

git 回滚操作

时间:2023-07-27 15:35:59浏览次数:32  
标签:reset 回滚 git 代码 提交 commit 操作

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

Git 的工作流

工作区:在 git add xx 之前,在自己当前分支所修改的代码内容!
暂存区:已经 git add xxx 进去,且没有执行 git commit xxx 的。
本地分支:已经 git commit -m xxx 提交到本地分支的。
远程分支:git push origin HEAD:refs/for/master HEAD 是本地,master是远程分支

代码回滚

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

1、在工作区的代码(checkout ~ 修改工作区文件)

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

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

2、代码 git add 到缓存区,并未 git commit 提交(reset ~ 修改暂存区文件)

git reset HEAD .
git reset HEAD a.txt

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

3、代码 git commit 到本地分支,但没有 git push 到远程 (git reset --hard ~ commit 之后)

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

4、代码 git push 把修改提交到远程仓库 (git reset || git revert)

  • (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的区别
    (a). git revert是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留( 会有 两次 commit id);
    (b). git reset是回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除 ( 只有一次 commit id)

开发过程中,场景处理:

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

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


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

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

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

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

场景三:刚才我发现之前的某次提交太愚蠢了,现在想要干掉它!
情况三:需要回滚某次提交

找到要回滚的commitID
git log
git revert commitID
删除某次提交
git log --oneline -n5

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

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

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



作者:_画圆_
链接:https://www.jianshu.com/p/c55958563f5a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:reset,回滚,git,代码,提交,commit,操作
From: https://www.cnblogs.com/zh503255670/p/17585079.html

相关文章

  • Linux对文件夹操作(复制,移动)
    复制文件夹cpcp-avuevue-copy将vue文件夹下面的所有文件,复制到同目录下vue-copy文件夹下面-a:相当于-d、-p、-r选项的集合,这几个选项我们一一介绍;-d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;-i:询问,如果目标文件已经存在,则会询问是否覆盖;-l:把目......
  • github源码python如何运行
    如何运行GitHub上的Python源码项目问题描述GitHub上有很多优秀的Python源码项目,但是对于一些新手来说,如何正确地运行这些项目可能会成为一个问题。因此,本文将提供一份解决方案,以帮助新手顺利地运行GitHub上的Python源码项目。解决方案步骤1:克隆项目首先,在GitHub......
  • jquery 操作某个td
    如何使用jQuery操作某个td概述在本文中,我将教你如何使用jQuery来操作一个HTML表格中的某个td元素。首先,让我们了解一下整个过程。过程概览下面是一张表格,它包含了三行三列的td元素:列1列2列3行1td1td2td3行2td4td5td6行3td7td8td9我......
  • windchill 当点击可视化提示“您的权限不足,无法执行此操作,不进行发布操作”时如何解决
    如图情况:解决办法如图:......
  • oracle已有表的分表分区优化操作步骤(单表过大)
    第一章、步骤总览0、获取创建表空间DDL、创建表空间(该步骤在将分区放入不同的表空间时采用)1、基于原表A在同一表空问建立临时分区表B2、将原表A数据插入到新建的临时分区表B3、验证分区表查询性能4、将原表A重命名为ATEMP5,指临附分区表日重命店沙示行6、删除原表A......
  • C语言中的关系操作符
    C语言中的关系操作符C语言用于比较的表达式,称为关系表达式(relationalexpression),里面使用的运算符就称为"关系运算符"(relationaloperator),主要有下面6个。>大于运算符>=大于等于运算符<小于运算符<=小于等于运算符==相等运算符!=不相等运算符下面是一些例子。a==b;......
  • C语言中的逻辑操作符
    C语言中的逻辑操作符逻辑操作符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符。!:逻辑取反运算符(改变单个表达式的真假)。&&:与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。||:或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。注:C......
  • 2023.7.25 将数组和减半的最少操作次数
    贪心,显然每次都削减最大数的一半,可以更快的接近至少削减一半的目标。可以证明,削减任何不是最大数的一半,都不会优于削减最大数的一半,因为题目要求不是正好减少一半,而是至少减少一半。所以可以开一个大根堆存储所有的数,每次取出堆顶的数进行减半,然后将减半后的数插入堆中,并且更新......
  • 华为认证欧拉openEuler-HCIA命令行操作基础
    Linux命令基础知识linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心。上一篇:openEuler操作系统入门使用Linux命令行命令行更高效:Linux系统中使用键盘操作速度要......
  • cpu 操作系统 JVM(大白话)
    大白话直接描述下,cpu,操作系统和jvm:cpu就像健身房的跑步机硬件设备操作系统就是更有权威的大人(有很多权限)jvm及我们写的java应用,或其他用户程序,就像一群小朋友每个小朋友都想在跑步机上玩,大人就需要按某种规则安排(任务调度),只允许玩多久,每次换其他小朋友,都要记录下当前同学的......