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
git的版本回退探索的更多相关文章
- Git(时光机-版本回退)
现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control system. ...
- Git学习--版本回退
现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control system. ...
- idea中git远程版本回退
idea中git远程版本回退 2017年10月15日 15:25:36 gomeplus 阅读数:19313 工作中遇到git远程仓库需要回退到历史版本的问题,根据网上的搜索结果结合自己的实践,整理了 ...
- git指令-版本回退
git指令-版本回退 回顾: 1. 修改文件 2. 添加到暂存区并提交 回顾对readme共三次修改: 1. 版本1:wrote a readme file Git is a version cont ...
- Git回版本回退
这里我们使用命令行的方式对已经提交的版本进行强行回退操作~~~ 一.将git的安装目录bin放到path路径中, 如下图所示: 二.进入cmd界面,依次输入下面内容即可(git 远程仓库 回退到指定版 ...
- git远程版本回退
本文为博主原创,未经允许不得转载: 之前在git提交版本时,发现将新开发的代码提交到了另一个分支上,为了不影响提交分支代码的 功能,需要回退到之前的版本. 在使用命令回退的时候,一直没有回退成功,有个 ...
- git实现版本回退
1. 首先查看自己的版本: ***:~/piaoshifu_object/epiao.piaoshifu.cn$ git log commit c8d5c67861d2d0e21856cc2b4f60 ...
- git reset 版本回退的三种用法总结
git reset (–mixed) HEAD~1 回退一个版本,且会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,不影响原来本地文件(未提交的也不受影响) git reset –soft ...
- git reset 版本回退
git log 查看所有提交信息. commit 67692318180bed6b2a17db0708cfbe0231e33db3 (HEAD -> master) Author: kingBo ...
随机推荐
- 【C语言】练习1-23
题目来源:<The C programming language>中的习题 练习1-23: 写一个删除C语言程序中所有的注释语句.要正确处理带引号的字符串与字符常量.在C语言中,注释不 ...
- Android之内存泄露、内存溢出、内存抖动分析
内存 JAVA是在JVM所虚拟出的内存环境中运行的,内存分为三个区:堆.栈和方法区.栈(stack):是简单的数据结构,程序运行时系统自动分配,使用完毕后自动释放.优点:速度快.堆(heap) ...
- Android Notification 的声音和震动
我们在Android系统发送一条Notification的时候,经常需要通过震动或声音来提醒用户.如何为Notification设置声音和震动了.大致思路有: - AndroidNotificatio ...
- appium简明教程(8)——那些工具
那片笑声让我想起我的那些tool 在我生命每个角落静静为我开着 我曾以为我会永远守在她身旁 今天我们已经离去在人海茫茫 她们都老了吧 都更新换代了吧 幸运的是我曾陪她们开发 啦…… 想她 啦…… 她还 ...
- vc++加载透明png图片方法-GDI+和CImage两种
转载自:http://blog.csdn.net/zhongbin104/article/details/8730935 先看看GDI+的方法方法1: 1.GDI+画透明图层(alpha)的png ...
- MFC添加自定义窗口消息
原文链接: http://www.cnblogs.com/smartvessel/archive/2011/07/18/2109472.html 1. 在头文件stdafx.h中增加一个自定义消息宏 ...
- css ::selection 的妙用
1.选中页面文字和元素时的背景颜色 ::selection { background: #25b864; color: #fff; } 2.不能选择页面内容(但可以拖拽内容进行复制.挺好玩的) ::s ...
- CentOS 6.5 搭建NFS文件服务器
环境介绍:服务器: 192.168.0.1客户机: 192.168.0.2安装软件包:服务器和客户机都要安装nfs 和 rpcbind 软件包:yum -y install nfs-utils rpc ...
- 复习下C 链表操作(单向循环链表、查找循环节点)
循环链表 稍复杂点. 肯能会有0 或 6 字型的单向循环链表. 接下来创建 单向循环链表 并 查找单向循环链表中的循环节点. 这里已6字型单向循环链表为例. //创建 循环链表 Student * ...
- Linux学习笔记--SSH免password登录
须要实现的效果: 有两台server:"192.168.201.236" 和 "192.168.201.237" 须要实现:在server"192.1 ...