首页 文章 精选 留言 我的

精选列表

搜索[交错序列],共10005篇文章
优秀的个人博客,低调大师

🏆「推荐收藏」【Git实战专题】代码提交错误怎么办?教你如何回退版本!

预备知识 一个commit对应这一个版本,有一个commit id,40位的16进制数字,通过SHA1计算得到,不同的文件计算出来的SHA1值不同(有很小的几率相同,可忽略),这样每一个提交都有其独特的id。每提交一个新版本,实际上Git服务就会把它们自动串成一条时间线。 在Git中,HEAD表示当前版本,例如:HEAD版本属于:e620a6ff0940a8dff…,那么HEAD^表示上一个版本,HEAD^^表示上上一个版本,往上100个版本可以写成HEAD加连续100个^,也可以写成:HEAD~100 git log:该命令显示从最近到最远的提交日志。 commit e620a6ff0940a8dff91e0d252f30e4d138ec37be Author: TangShengqin <15527733782@163.com> Date: Wed Jan 3 10:35:44 2018 +0800 commit 33342d9870f104719d351539a15e74a1382407ea Author: TangShengqin <15527733782@163.com> Date: Wed Jan 3 10:34:03 2018 +0800 git结构和各操作之间的关系 git log --pretty=oneline 查看已提交的版本 回退版本(三种方式) git reset commit_id(撤销commit和add操作) gitreset默认是--mixed模式 git reset --mixed commit_id撤销commit和add操作 回退一个版本,且会将暂存区的内容和本地已提交(commit)的内容全部恢复到未暂存的状态,不影响原来本地文件(未提交的也不受影响) 会保留源码,只是将gitcommit和index信息回退到了某个版本 git reset --soft commit_id(撤销commit操作) *回退一个版本,不清空暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受影响) 保留源码,只回退commit信息到某个版本,不涉及index的回退,如果还需要提交,直接commit即可 git reset --hard commit_id(慎用) git reset –hard commit_id 或则是 git reset –hard HEAD^ 撤销commit和add操作,并将本地版本置回上一版本 回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换 源码也会回退到某个版本,commit和index都会回退到某个版本.(注意这种方式是改变本地代码仓库源码) hard选项,表示彻底将工作区、暂存区和版本库记录恢复到指定的版本库 reset和revert的用法: reset:push前。 revert:push后。 gitrevert<commit_id..> 回滚到置顶的版本,执行后需要gitpush reset与revert区别: 写到了git reset指令,就不得不说下它与git revert的区别: git reset是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。 git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是直接把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。 实际案例 缓存区代码覆盖工作区代码 场景:缓存区存有上次改动代码,即之前有执行:gitadd 当前工作区间代码想废弃, 可将缓存区中代码覆盖之: 对应指令: 缓存区某一文件代码 覆盖本地工作区: git checkout -- testReset.txt 将匹配的文件覆盖:git checkout -- *.txt 将所有文件覆盖:git checkout -- . 本地仓库代码覆盖缓存区代码 场景:发现之前add的文件不需要了,又不想工作区间重新改回去。 对应指令: 将本地仓库某一文件覆盖缓存区: git reset HEAD testReset.txt 将匹配的文件覆盖缓存区:git reset HEAD *.txt 将所有文件覆盖缓存区:git reset HEAD . 注意:改变的是缓存区代码,工作区间代码不变(编辑器代码不会改变) 本地仓库代码覆盖工作区代码(常用) 上述两场景在实际开发中没那么常用,接下来本地仓库代码 覆盖工作区间代码 则经常会用到。 场景:当前工作区间代码混乱(一般更新或合并分支后),废弃当前改动; 对应指令: 将本地仓库某一文件代码 覆盖本地工作区: git checkout HEAD testReset.txt 将本地仓库所有文件代码 覆盖本地工作区:(谨慎操作):git checkout HEAD . 我们知道本地仓库中有一个commit列表, 记录了所有commit的记录, 查看commit列表指令: 查看commit id, 查看提交记录(git commit的记录) git log git log --pretty=oneline 查看以往提交历史(包括 撤销回退 记录) git reflog 根据commit列表,工作区间代码能实现更灵活的回退: 本地工作区间代码 回退到上一次版本、上上次、前10个版本 git reset --hard HEAD^ git reset --hard HEAD^^ git reset --hard HEAD~10 本地工作区间代码 回退到指定版本(“d362816”为commit id) git reset --hard d362816 远程仓库代码覆盖本地仓库代码(清除 未push 的commit) 场景: 有时候合并分支、切换分支、更新代码会导致提交絮乱的问题(没使用--rebase方式),具体体现在自动生成了commit且工作区间代码很多冲突。使工作区间代码跟线上代码一致且删除新生成的commit。 对应指令: 本地工作区间代码回退到远程版本 git reset –-hard origin/master 远程仓库代码回滚(线上代码回滚) 场景: 提交了一个commit(该提交包含很多文件), 发现有问题, 需要回滚, 将线上分支(master)回滚到上一次commit; 合理一些的是使用 git reset或git revert方式进行回滚; git reset方式图解: git revert方式图解: 我们可以使用git revert将新的commit替换掉;(不用git reset而用git revert的原因是保留commit方便后续代码恢复) 对应指令: // 替换掉上次提交的代码文件(上次的commit记录会保留) git revert HEAD git commit -m "回滚上次commit" git push origin master git revert HEAD:撤销最近的一次提交,如果你最近一次提交是用revert命令产生的,那么你再执行一次,就相当于撤销了上次的撤销操作,换句话说,你连续执行两次revert HEAD命令,就跟没执行是一样的 总结案例 git log --pretty=oneline 如果你在本地做了错误提交,那么回退版本的方法很简单 先用下面命令找到要回退的版本的commit id: git reflog 接着回退版本: git reset --hard a7e1d279a7e1d279 就是你要回退的版本的commit id的前面几位。 远程分支版本回退的方法 如果你的错误提交已经推送到自己的远程分支了,那么就需要回滚远程分支了。 首先要回退本地分支: git reflog git reset --hard Obfafd 紧接着强制推送到远程分支: git push -f origin master origin就是一个名字,它是在你clone一个托管在Github上代码库时,git为你默认创建的指向这个远程代码库的标签,origin指向的是repository,master只是这个repository中默认创建的第一个branch。 当你git push的时候因为origin和master都是默认创建的,所以可以这样省略。 注意:本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册