【LM】idea操作git~本地+远程 回滚版本
我的git汇总篇:https://blog.****.net/weixin_44647371/article/details/88177472
【补充】idea本地回退到任意时刻操作
可以用下图中红色这个方式 (和git无关)
一.使用revert简单还原到最近一次本地commit版本
使用范围:这个适用于没有commit操作下的数据回滚
个人使用场景:常常在研究某个功能前,会先将本地代码commit,然后再去修改研究代码,后面如果发现这些修改研究错了,也不用管改了多少,直接revert一步回到改之前的状态。
二.在新建的本地分支上,将数据回滚到指定版本(安全)
这个比较安全,但是后面应该要进行分支合并操作啥的
三.直接在当前分支上进行版本回退
Hard:这个最好理解【至少要掌握这种】,就是将当前版本的数据100%与回退的版本一致(特例:当前所有未add的代码才会保留),但是之前在回退版本之后提交的数据都会丢失;
Mixed:这种回滚后本地代码乍一看什么都没变化,但查看version Control–>local changes下发现数据出现了尚未commit的。实质上它是保持了100%现有代码不变的基础上,将本地仓库最近一次commit版本改为到待回滚的版本了,【特例:现有代码中相对回滚版本新增的代码全部变为未add状态】:相当于其实已经回退到指定版本了,只是在指定版本上修改代码成"现有代码",这样我们就可以方便我们选择保留下“现有代码”上的哪些操作,如果完全放弃现有代码,全部进行简单revert即可;
keep:功能基本和Hard一样,特例:当前所有未commit的代码(含未add的)会保留,且keep后都变为尚未add的文件------------------------------测试时要点击下左上方的同步圈圈进行刷新才看的出来
soft:功能和Mixed基本一样,【特例:现有代码中原本已add的文件仍然保持已add状态】,测试也要点击左上方的圈圈刷新下
三-小结
以上4种方式都会将仓库的真实版本更改为待回滚的版本(用一中的revert可证明);且除了soft外保留下来的数据中新增的文件都会处于未被版本控制状态(即未add);
hard:当前版本中只有未add的数据会保留下来,当前的其他数据全部丢失
【即未被git管理的文件会保留】
keep:当前版本中只有已经commit的数据会丢失,其他数据都保留着
【即,没有提交的数据都会保留】
mixed和soft都会将当前所有数据保留下来,但如果是soft,已经add的数据保留下来后仍然处于add状态而不是非add
【即所有数据保留】
四.远程回滚
问题:按理说本地回滚后在push的话理应会将远程版本更新成和我本地相同版本,但实际上会出现push拒绝,因为你之前本地回退时是真的将版本后往后退了,导致你本地基础版本落后于远程基础版本,而push只接受前进的版本;
于是网上有些人说可以通过“-f”命令强制push,但我告诉你,这样也很不好,因为如果是组团开发,你强制的确是将远程版本回退了,但是其他人如果在之前拉取过代码,那其他人准备提交前进行pull操作时,因为他们的本地基础版本和远程你强改后的基础版本不一致导致pull失败,它如果再push的话会将你之前回退的数据重新覆盖掉,要改过来其他人都需要进行一系列的命令行操作,很是麻烦!总之,强烈不推荐进行强制push!!!
正确的远程回滚姿势应该如下:
方式一(推荐)
01.还是如之前三种那样操作将本地代码回滚成期待的样子(根据需要四种方式中任选一种,比如【hard】);
02.本地代码回滚到自己希望的样子后在log找到进行版本回滚之前最后提交的版本,并使用【sort】将数据再回滚,此时本地基准版本库就与远程一致了,且本地代码已经改成自己所需要回滚的数据,再将这些数据重新提交(就相当于在最新版本基础上将代码改成旧版本的数据),此时就不存在版本冲突了,再pull+push进行推送即可
(为什么我推荐用soft而不是mixed,主要考虑的是soft可以区分回滚后哪些文件是你之前没提交的,自己根据需求决定用这两个中的哪一种吧!)
方式二(个人不推荐)
如果有冲突需要选处理
处理完冲突后会提示commit提交,最后再pull+push推送就可以达到回滚远程版本目的。
方式二存在的问题:
a.这种回滚方式回滚到的是v2提交之前的数据,即v1版本数据;
b.且用revert回滚是进行的合并回滚,即假设当前数据里有个文件a.txt,要回滚到的版本里没有a.txt,在log中使用revert回滚的话会造成回滚后的数据中仍然a.txt,不会进行删除!
四-小结
方法一虽然操作需要两步,且需要理解那4种合并方式的区别,但是回滚效果比较好控制,且在log中不会留下太多痕迹,个人推荐就用这种!;
方式二虽然只需一步,但是回滚时当前版本有的数据回滚后并不会删除,适用范围比较小,不推荐;
如觉得好请~~点赞哦!
五.git强制推送
idea强推
小乌龟强推
小乌龟两种强推的区别:https://tortoisegit.org/docs/tortoisegit/tgit-dug-push.html