首页 > 其他分享 >git版本回退

git版本回退

时间:2022-10-17 15:13:15浏览次数:47  
标签:reset git 版本 -- 提交 回退

学习git reset之前先了解git的四区五状态

概念

一张图理解四个区

再是五个状态

  • 未修改(Origin):上次提交后就没改动过

  • 已修改(Modified):上次提交后有修改

  • 已暂存(Staged):通过git add 追踪了的

  • 已提交(Committed):通过git commit 提交到了本地仓库

  • 已推送(Pushed):通过git push 推送到了远程仓库

 

本地仓库版本回退

$ git reset [--soft | --mixed | --hard] [HEAD]  #回退,默认为--mixed
​
--soft 、--mixed、--hard就是三个恢复等级。
​
$ git reset --soft HEAD    #回退到指定版本
$ git reset --soft HEAD~3   # 回退上上上一个版本 
​
$ git reset --hard HEAD~3  # 回退上上上一个版本  
$ git reset –hard bae128  # 回退到某个版本回退点之前的所有信息。 
$ git reset --hard origin/master    # 将本地的状态回退到和远程的一样

我需求一般都在--hard,就是我从第a个版本开始敲,删了些核心代码写了些鸡肋代码,这个时候就可以 git reset --hard 回退到我上一次提交的版本,也就是第a个版本。这个好理解,但是需要明白三个参数的区别,回退撤销的同时会不会影响本地库的代码,add追踪的代码,追踪前工作区的代码...就需要弄明白几个参数的作用了。

  • --soft  ,已经add的暂存区以及工作空间的所有东西都不变。
    PS:就是撤销我的commit,即未做commit操作

  • --mixed,默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
    PS:已经add的暂存区会丢失掉,工作空间的代码什么的是不变的。我测试过了,就是仅仅取消追踪,我工作区修改的代码没影响

  • --hard,撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。 那么一切就全都恢复了,
    PS:aad的暂存区消失,代码什么的也恢复到以前状态。我测试过了,就是取消追踪,我工作区修改的恢复到我上一次提交的版本,之前commit提交到本地仓库的也会删掉,换句话说新写的代码等于没写,删了的等于没删

可能需要用到的命令
$ git log    #查看提交记录,但不能查看已经删除的记录。
$ git diff   #查看修改过的但未add追踪的文件
$ git status  #查看add追踪过的文件
$ git reflog   #可以查看看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录。

远程仓库版本回退

学习了上边本地库版本回退之后,我就有了我自己的想法思路。

主要还是暂时没有碰到类似需求吧,纯当学习了

场景

当我commit代码到了本地库,又push到了远程库,不一会我发现刚推送的版本有错误,我需要将远程库回退到上一个版本,怎么办?

我的思路

先查看一下想要回退的上一个版本的head,然后reset回退指定版本

$ git reflog
$ git reset --hard Obfafd

此时本地库落后远程库一次提交,那肯定直接推不过去的,因为提交记录落后,那就强推吧嘻嘻

$ git commit -mf "强推"

这样远程库就与本地库记录一致,代码一致,我要的效果达到了,但是如果在公司我可能会挨打,因为-f 强推极其不优雅。我这边记录倒是同步了,我这一强推就可能导致了别的小伙伴的本地库超前远程库几次提交。

所有这种方式留给自己的私有仓库用差不多

正确方式

经过查阅资料,实际测试我又学到了

经过一个测试说明吧

首先早上我推送了一个版本到远程库,晚上发现了一段文字没说明白,因为在中午可能有小伙伴提交过版本,所以我不敢也不能强推

我现在需要将远程库恢复到上一个版本(按理说小伙伴推送过了,我即使恢复到上一个也没用,因为上一个是小伙伴的版本,这个也是被他合并过的,也就是说这个版本我的说明文字还是在,可以多恢复几次,或者指定恢复,这里测试不纠结了),

输入命令git revert HEAD  表示回退到上一个版本(会打开vi编辑器输入提交信息),此时虽然代码回退了,但是记录却是向前的,与commit非常相似,所以在之后还需要push提交到远程仓库

当我用revert回退之后,所有人pull之后,他们的代码也自动的回退了。相当于一次补偿提交 然后 git push 到远程仓库,如此一来谁都没影响到,妙啊!!!

再看到远程库的提交记录也可以看到

 

标签:reset,git,版本,--,提交,回退
From: https://www.cnblogs.com/ruyan-lx/p/16799231.html

相关文章

  • Oracle查看数据库版本等信息
    查看数据库版本--查看oracle版本select*fromproduct_component_version;查看数据库列表--查看数据库列表selectusernameasschema_namefromsys.all_userso......
  • unity发布WebGL版本与前端交互
    由unity官方给该的方法亲测无法成功传参,故亲手写一篇相关教程,开发中实测下列方式可用。 unity发消息给前端:1.首先在unity的Plugins文件夹下创建一个后缀为.jslib(例:Web......
  • 【杂谈】从GitHub上星星最多的男人开始发GitHub综述资料
    ​好的资源有利于大家迅速走上正确的学习道路,今天就来推荐一下GitHub上面那些机器学习领域里,最值得关注的综述性质的项目,一般名字会带上一个Awesome。作者&编辑 | 言有三......
  • 最新版本小红书接口 xhs接口 小红书数据 小红书爬虫 小红书APP 小红书api
    最新版本APP协议,可提供数据接口 q+3275974800!仅供学习交流,如果侵权请联系删除,谢谢!达人详情  笔记详情  笔记列表 ......
  • 服务器添加git钩子
    又名 git宝塔码云webhook钩子自动同步 第一步,在服务器下载,软件,webhook。第二步,查看git版本,不能太低。这个太低了。   这个最新   第三步,yumremov......
  • 如何更详细查看SAP 系统版本信息
    查看SAP系统的版本信息是每个Basis的基本功,版本信息主要有:NW版本、Kernel版本,ECC版本,S/4版本等。 以下我们就来聊一下如何查看SAP系统的版本:SAPNetWeaver版本NW版本......
  • git rebase 与 git merge 的区别是什么 All In One
    gitrebase与gitmerge的区别是什么AllInOnerefshttps://www.cnblogs.com/xgqfrms/p/16457911.htmlpick=>squashamendhttps://www.cnblogs.com/xgqfrms/p/164......
  • git 仅还原某个文件到历史版本
    背景在git提交过程中,难免会遇到一种情况,修改已经提交了,但提交部分还提交了部分本不该改动的文件,这时候如果统一恢复到某个历史版本,会把修改一起恢复,所以我们可以仅恢复......
  • IDEA Debug过程中如何回退操作? Reset Frame Drop Frame
    IDEADebug过程中如何回退操作?大家在Debug程序的时候,是否遇到过因为“下一步”按太快,而导致跳过了想要深入分析的那段代码?是不是很想要有“回到上一步”这样的操作呢?在ID......
  • 极客的浪漫「GitHub 热点速览 v.22.41」
    极客的浪漫,是怀旧复古的开源操作系统SerenityOS献上的情书;也是实用派用AI作画工具novelai-bot生成二次元女友。LxgwWenKai用仿宋/楷体中文字体书写而成的那份ma......