• git的版本回退探索


    简介

    今天改完代码匆忙提交,上线发现有问题,那怎么办?废话,赶紧回滚,那怎么回滚,开始用git reset [--soft | --mixed | --hard 命令,但这命令真的能达到我预期的效果吗? 每个参数后面的意思又是什么?让人一头雾水,然后用了 reset  --hard命令,并没有达到预期的效果。现在总结下

    1、git相关术语

    • HEAD

    这是当前分支版本顶端的别名,也就是在当前分支你最近的一个提交

    • Index

    index也被称为staging area,是指一整套即将被下一个提交的文件集合。他也是将成为HEAD的父亲的那个commit

    • Working Area

       working Area代表你正在工作的那个文件集

    1、没有push

    这种情况发生在你的本地代码仓库,可能你add ,commit 以后发现代码有点问题,准备取消提交,用到下面命令

    reset
    git reset [--soft | --mixed | --hard

      # --soft # 只还原 HEAD
      # --mixed # 还原 HEAD、Index # 默认参数
      # --hard # 还原 HEAD、Index、Working Directory

    2、已经push

    git revert HEAD                  #撤销前一次 commit
    git revert HEAD^                 #撤销前前一次 commit
    git revert commitId              #(比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。

    git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,

    版本会递增,不影响之前提交的内容

    git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
    作为一次最新的提交

    2.1、example

    假设按时间顺序依次有commit1, commit2, commit3,commit4,对应有version1, version2, version3, version4四个状态。现在你push了version4线上有问题,想要回退到version3状态,只需要 执行

    git revert HEAD 

    注意:这样线上的代码还是不会变,但是本地的代码状态回到了 version3,你再commit5,push到线上,这样线上的代码就跟version3一样了。

     3、reset和revert对比

      看到这里细心的读者会觉得,为什么push之后,reset就不能回滚,git reset --hard commitId也能改变本地工作区,再commit,和push一次,线上的代码不就改变了吗?博主自测的情况是不行。

    你用git reset --hard commitId 本地的代码虽然回退了,跟线上代码不同了,但是local Changes并没出现跟线上代码不同的文件,这时候在terminal中,用命令提交,如下:

    一样是失败,提示你在push 之前,先git pull ,但是你 git  pull,线下错误代码又恢复了,所以push之后的想回滚,用git revert

    参考:http://blog.csdn.net/secretx/article/details/51461972

  • 相关阅读:
    04-树7 二叉搜索树的操作集
    04-树6 Complete Binary Search Tree
    04-树5 Root of AVL Tree
    04-树4 是否同一棵二叉搜索树
    05-树8 File Transfer
    05-树7 堆中的路径
    二叉树的非递归遍历(先序、中序、后序和层序遍历)
    队列的定义与操作——顺序存储和链式存储
    Maven项目的核心pom.xml解释(转)
    eclipse安装插件的三种方式
  • 原文地址:https://www.cnblogs.com/520playboy/p/7474452.html
Copyright © 2020-2023  润新知