zoukankan      html  css  js  c++  java
  • git远程仓库回退

    (一)退回到某个commit -- reset

    1. git log (找到你想要回退的版本id,将它复制下来)

    2. git reset --hard 版本id (本地回退到目标版本)

    3.git push --force (推送到远程仓库,实现回退)

     

    (二)只想让以前某个commit的代码回退,而在它之后的代码都不回退 -- revert

    1. git log (找到你想要删除的版本id,将它复制下来)

    2. git revert 版本id (本地回退到目标版本)

    3.git push --force (推送到远程仓库,实现回退)

    (三)推荐使用revert进行远程仓库回退

    reset与revert最大的区别在于:revert是新提交一个commit来撤回代码,而reset只是回到某个版本的代码commit

    虽然两者都能回退到你想要的代码,但是对于远程仓库,当使用reset回退,其他同事的代码pull release拉最新代码,拉取到的结果并不会回退你的代码,因为pull是fetch与merge的结果,对于已有的commit进行merge是没有效果的。

    而revert是新的commit,此时merge新的commit就能回退到你的代码

    (四)进行远程分支push --force时需要进行备份再push

    git branch backup

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    场景

    提测的代码(已合入release),决定暂时不上生产,需要回退远程仓库的代码

    举例如下:B与D的代码需要回退,A为线上版本,C为其他同事提交的代码

     

    对一个文件新增b,c,d的三个修改,分别提交

     

    目标是回退BD剩下AC

     

    回退远程仓库代码的五种途径

    2.1 手工修改最新版本代码

    直接从最新的版本修改代码,修改到我们想要版本,然后再提交上去,也就是手工回退。在这个例子中就是直接删除‘bd’后提交

     

    手工改代码很容易出错

    (1)     没有回退所有需要回退的代码

    (2)     删除了不需要回退的代码

    2.2 本地仓库reset后强推到远程仓库,其他同事需手动reset

    存在问题:

    (1)     需要回退的代码夹杂了其他同事的commit,直接reset会把其他同事的代码也删除掉

     

    (2) 远程仓库后退后,需要其他同事未回退的同事手动reset它们的本地仓库,否则其他同事提交会把删除的代码再次提交上去

     

    2.3 拷贝release,远程仓库删除release分支后再覆盖

    与2.2 reset相似:

    从要删除的版本的前一个版本拉一个拷贝分支,然后在远程仓库删掉release分支,再将拷贝分支推到远程release。

    存在问题:需要让其他同事(本地版本领先于回退后的远程仓库版本)重拉项目或回退

    2.4本地仓库revert后强推到远程仓库

    Revert作用是消除一个commit,它的原理是新建一个commit反向修改目标commit

    Revert与reset最主要的区别:revert是去除一个commit,reset是回到某个版本

     

    对于此场景适用revert,我们只要把B与D的提交revert掉,就能达到目的

    Revert实现的回退,不需要其他同事重拉项目或者手动回退项目

    2.5 在gitlab上执行revert

    需要注意的是在gitlab上revert,必须是无冲突的时候才成功,在此场景下有冲突就失败了

    总结

    (1)    回到某个版本,使用reset;消除某个commit,使用revert

    (2)     使用git reset实现回退到某个版本,需要让其他同事也回退或者重拉项目

    (3)     Revert有可能要手动处理冲突,reset没有这个问题

    (4)     对release分支使用git push –force(强制推送)有风险,应该进行备份;或者对自己的分支进行revert,然后提merge request合并到release

    (5)     如果没有revert冲突,建议在gitlab上执行revert

  • 相关阅读:
    数据结构(复习)链表完结篇
    第三部分_JSP详解续
    第二部分_搭建Java Web开发环境与配置Tomcat服务器&JSP详解
    第一部分_HTTP协议详解&HTML常用控件
    集合框架中的接口及其实现类
    封底估算
    从起泡排序探究算法正确性证明的一般规律
    各种曲线运动、弹球、笔记
    Android 之px于dp在Java代码中的转换
    sqlite之聚合函数的使用
  • 原文地址:https://www.cnblogs.com/ming-szu/p/11052819.html
Copyright © 2011-2022 走看看