Hey

git学习篇(5)
这个是Git学习的第5篇内容,今天我们来讲讲Git如何做代码回滚。

代码回滚

不知道大家在平常开发时中没有犯过这样一个错误,就是把IDE的配置或者项目运行的本地配置文件上传到服务器,导致别人更新代码之后,出现本地项目无法运行情况。

这是常见需要做代码回滚的一个场景,提交了一些我们不希望的文件。

我们也可能会碰到,在一次产品上线之后,出现了紧急Bug,一时半会无法修复,为了保证线上稳定,需要做代码回滚。

时光不能回退,Git却允许我们改变历史。

想要让Git回退历史,有以下步骤:

1.使用git log命令,查看分支提交历史,确认需要回退的版本2.使用git reset --hard commit_id命令,进行版本回退快捷命令:回退上个版本:git reset --hard HEAD^ 【注:HEAD是指向当前版本的指针,HEAD^表示上个版本,HEAD^^表示上上个版本】3.使用git push origin命令,推送至远程分支

如果修改到的文件比较少,我们可以不通过命令回滚的方式,手动删除之前的修改,再进行提交。

撤销修改

一些时候,为了验证Bug,我们可能会直接在测试服务器上打断点调试。如果忘记去掉调试内容,在执行git pull更新时,Git会提示你提交修改。

此时,你可能已经不记得修改什么了,这个时候,我们可以用git checkout -- file命令,来清空工作区的修改。是的,git checkout命令不仅可以用来切换分支,还能撤销文件修改。

如果想要撤销提交到暂存区后的文件内容怎么办呢(即执行git add之后),我们可以使用git reset HEAD file命令撤销提交到暂存区的内容,再使用git checkout -- file命令来撤销工作区的修改,需要分两步进行操作。

reset还是revert?

reset和revert都可以用来回滚代码。但他们是有区别的,准确来说,reset是用来"回退"版本,而revert是用来"还原"某次或者某几次提交。

听起来有点绕,怎么去理解他们呢?

举个例子,比如在master分支,有以下提交历史:

42eae13 (HEAD -> master) 第四次修改
97ea0f9 第三次修改
e50b7c2 第二次修改
3a52650 第一次修改

可以看到,master最新版本为第四次修改。

如果发现,在第四次修改有错误,需要回滚到第三次修改,就可以用reset命令来回退。

执行 git reset --hard 97ea0f9,这个时候,git的提交历史变为:

97ea0f9 (HEAD -> master) 第三次修改
e50b7c2 第二次修改
3a52650 第一次修改

可以看到master当前指向97ea0f9这个版本,我们回到了第三次修改。

使用reset命令,Git会把要回退版本之后提交的修改都删除掉。要从第四次修改回退到第一次修改,那么会删除第二、三、四次的修改。【注:这里并不是真正的物理删除】

那如果发现第三次修改有错误,想要恢复第三次修改,却要保留第四次修改呢?

这个时候就可以用revert命令:

git revert -n 97ea0f9
git commit -m "恢复第三次修改"

Git提交历史会变成:

33b8b30 (HEAD -> master) Revert "恢复第三次修改"
42eae13 第四次修改
97ea0f9 第三次修改
e50b7c2 第二次修改
3a52650 第一次修改

实际上,Git把第三次修改从提交中剔除(还原)了,还保留了第四次修改,并且产生了新的commit_id。

在实际生产环境中,代码是基于master分支发布到线上的,会有多人进行提交。可能会碰到自己或团队其他成员开发的某个功能在上线之后有Bug,需要及时做代码回滚的操作。

在确认要回滚的版本之后,如果别人没有最新提交,那么就可以直接用reset命令进行版本回退,否则,就可以考虑使用revert命令进行还原修改,不能影响到别人的提交。

使用reset还是revert,需要考虑实际的适用场景,没有绝对化。

上面提的并不是真正的物理删除,是因为Git会把分支的每次修改记录都会保留下来,比如有某次的commit,某次的reset等。而使用git reflog show命令,可以查看完整的提交历史,只要有commit_id,我们就能恢复任意版本的代码,在各版本之间来回穿梭。

以上,就是我对Git回滚代码的一些使用心得,个人观点,仅供参考。

拜托,不要再问我Git如何回滚代码相关推荐

  1. Git如何回滚代码?

    摘要: 多年以后,你面对一个需要回滚的Git仓库,准会想起这篇博客. 某一天,用户跟我反馈,他不能分配任务了.我去看了一下Fundebug捕获的报错信息: 可知,出错原因是前端发送的请求参数有问题.这 ...

  2. Git如何回滚代码? 1

    摘要: 多年以后,你面对一个需要回滚的Git仓库,准会想起这篇博客. 某一天,用户跟我反馈,他不能分配任务了.我去看了一下Fundebug捕获的报错信息: 可知,出错原因是前端发送的请求参数有问题.这 ...

  3. 『实用教程』使用Visual Studio自带的Git管理回滚代码版本

    使用Visual Studio自带的Git管理回滚代码版本 需求: 恢复本地某一时刻的版本,并提交覆盖远程版本 操作: 拉取远程最新版本至本地 提交所有更新 操作\查看历史记录,显示所有已提交更新,然 ...

  4. git revert回滚代码

    git revert命令用于回滚代码. 举个例子,创建一个gi_revert_test的工程,分别作三次改动:第一次创建demo_file文件,第二次在demo_file文件中添加一些内容,第三次在d ...

  5. git如何切换分支_拜托,不要再问我Git分支如何使用

    今天来讲讲我使用Git分支的一些经验,记录一下,希望对大家有帮助. 阐述 在平常开发中,一般都会对应三种环境,本地环境.测试环境.线上环境.开发的基本流程都是先在本地环境开发好,再把代码发布到测试环境 ...

  6. 在idea里如何实现Git项目回滚

    在idea里如何实现Git项目回滚 先我们要回滚的项目右键,如下: 点击Git,再点击Show History 选择你要回滚的分支 然后右键,如下: 点击Copy  Revision  Number ...

  7. git 回滚 add 操作_炫技!git 优雅回滚一次错误的合并操作!

    点击蓝色小字关注! 关注一下你就不会有bug!合并操作 相对于常规的 commit,当使用 git merge 合并两个分支的时候,你会得到一个新的 merge commit. 当我们 git sho ...

  8. idea中git版本回滚以及git指令回滚

    idea中git版本回滚以及git 回滚指令 场景 在项目开发过程中,git提交的最新版本的代码出现问题,需要回滚到之前的某一个版本,需要使用到git的reset操作进行回滚,与之区分的revert操 ...

  9. git 代码回滚_git代码版本管理(1)——git版本回滚

    git代码版本管理(1)--git版本回滚 1.问题背景 在利用github.gitlab.Gitee等代码管理器中对代码的管理,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提 ...

最新文章

  1. 《彩票假设》ICLR 2019 best paper 阅读笔记
  2. FLEX:使用setTimeout,setInterval ,实现sleep功能(转)
  3. Redis各特性的应用场景
  4. Java 加密 base64 encode
  5. 什么叫枚举法_四年级:美妙数学之“巧用枚举法”1(0202四)
  6. 【JVM】类是怎么加载的?
  7. 华为云用什么吸引 150 万开发者?
  8. hbase安装包_HBase集群搭建
  9. 插入保存?展现show的顺序
  10. Z逆变换(2020.10.21)
  11. java和数据库时间类型
  12. 2022年天猫超市春节不打烊活动时间规定
  13. python如何采集同花顺股票日度历史数据
  14. 常见的hash函数算法
  15. 配置局域网内电脑快速传输数据
  16. 世界上首先实现存储的电子数字计算机,世界上首先实现存储程序的电子数字计算机是ENIAC。...
  17. 【精通内核】Linux内核自旋锁实现原理与源码解析
  18. html微信分享缩略图描述,微信分享接口示例(设置标题、缩略图、连接、描述)...
  19. 超实用的10款研发工具,你知道几种呢?
  20. 安装APP时弹窗未知风险未知开发者,还能下载吗?

热门文章

  1. 基于 Flex+GoogleMap+PHP 的远程实时数据监测系统
  2. Nginx系列--upstream模块的使用
  3. 如何制作精美的GIF动图
  4. jQuery 插件开发——Menu(导航菜单)
  5. 视频教程-前后端分离与性能优化-JavaScript
  6. [OpenGL]OpenGL几何变换的秘密--投影(透视投影、平行投影、正投影)
  7. PostgreSQL9.4基于pglogical发布订阅功能实现及操作
  8. 从纪念碑谷的收益看小而美的游戏的盈利困境
  9. PLC编程基本功:梯形图与控制线路
  10. PNAS | 香港理工李向东等揭示全球空气细菌群落与地球微生物组和人类活动的互作...