git教程:reset,revert

我们使用版本控制系统的原因之一,就是希望保存开发开始以来的各种修改,方便找回以前的代码,或去除错误修改。就算是一个人开发,如果没有版本控制系统,我开发进行到一个地方,发现方向不对,要回头时,只能再重新开发,或凭记忆修改代码到以前状态,那简直是噩梦。

本文专门介绍一下后悔药:reset,revert。

先讲一下版本,我们要恢复也要知道恢复到哪个版本,git不像svn有版本号,只有commit ID,就是那一串40位的十六进制字符串,为了方便操作,用HEAD代表最后一次提交,HEAD^表示HEAD的上次提交:

当然要表示从最后数第n次提交也可以用,HEAD~n:

如果只回退最近一次,可以:

git reset HEAD^

或者:

git revert HEAD

这两个效果是等价的,但实现是不同的:

git reset HEAD^

git revert HEAD

reset是直接把HEAD指向前一个版本,从log里看,没有最后一次提交了。

revert是把最后一次提交的修改撤销,再提交服务器,从log里看,多了一个回退提交,原提交也在。

还有,reset默认不修改工作区文件,回退后,工作区文件还是原来的,没回退。

如果加 --hard 会把工作区也回退。

revert默认就把修改合并提交的,出了冲突,才需求手工修改提交。

注意,只有对最后一次提交,他们才是等价的,reset作用是回卷,revert是撤销。

git reset HEAD~3

git revert HEAD~3

可以看到如果参数是一个版本,revert是只撤销这个版本作的修改,再合并提交。

而reset则是回退到这个版本,这个版本后的修改都丢掉。

如果从最终结果看,下面命令是等价的:

git reset HEAD~3

git revert HEAD~3..HEAD

revert后面 <版本a>..<版本b>,从<版本b>开始连续回退到<版本a>,但不包括<版本a>,实际也是一个版本一次的回退,每次都会让你输入提交注释。

分别执行上面指令,如果看log,会发现,reset后少了3个log,revert后多了3个log。

revert后如果不想撤销了,看一下log,reset回去就可以了。

reset后后悔了怎么办,没有log了!没关系,下面命令可以查到更多commit ID:

git reflog

再输入:

git reset <commit ID>

这个commit ID是上次reset前的ID,就可以回退会reset以前状态了。

时间: 2024-10-06 15:44:47

git教程:reset,revert的相关文章

一图看懂git版本管理 reset revert checkout

git是一个流程,流程就有提交和回滚,git提供这些命令就是让你提交修改和回滚修改的. 自己用powerdesign画了一张图,可以很容易看懂git中版本如何向前提交和向后回滚 提交相关:add,comit 回滚相关:reset,revert,checkout 下图小人 1,2,3 分别表示git的三个重要概念:工作区,暂存区,本地版本库. 初始状态txt文件都指向v1版本状态. 原文地址:https://www.cnblogs.com/reachlins/p/9146135.html

git reset revert 回退回滚取消提交返回上一版本

git reset revert 回退回滚取消提交返回上一版本 总有一天你会遇到下面的问题. (1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚. (2)改完代码测试也没有问题,但是上线发现你的修改影响了之前运行正常的代码报错,必须回滚. 这些开发中很常见的问题,所以git的取消提交,回退甚至返回上一版本都是特别重要的. 大致分为下面2种情况: 1.没有push 这种情况发生在你的本地代码仓库,可能你add ,commit 以后发现代码有点问题,准备取消提交,用到下面命令 reset g

[转]Git教程【译】

http://www.cnblogs.com/zhangjing230/archive/2012/05/09/2489745.html 原文出处:http://www.vogella.com/articles/Git/article.html 翻译说明:个人出于兴趣爱好翻译这篇Git教程(google 搜索git tutorial排名第一的文章).学习git最初的原因是为了了解GitHub,译者水平有限,有不足之处欢迎指正.希望这边译文对你能有帮助.转载请链接出处. Git教程 本教程通过命令行

Git 教程 -- 基于自己学习记录

Git 教程 -- 基于自己学习记录 1. 引言 由于学校布置了一项熟悉 git 和 svn 操作的实验,所以自己重新温习了下 git,记录过程在这. 2. 注册登录 GitHub. 3. 选择一个仓库克隆到本地,这里以我自己的一个私人项目为例,克隆到本地. git clone https://github.com/weixuqin/love_source.git //克隆项目到本地 4. 创建dev 分支,并切换到dev分支. git checkout -b dev //创建dev分支 git

分布式版本控制系统 Git 教程

目录   简介  原理  安装  配置  命令  小结  资料 简介 Git 是什么? Git 是一个开源的分布式版本控制系统. 什么是版本控制? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 什么是分布式版本控制系统? 介绍分布式版本控制系统前,有必要先了解一下传统的集中式版本控制系统. 集中化的版本控制系统,诸如 CVS,Subversion 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文

Git教程学习(二)

教程来自: Git教程(廖雪峰的官方网站) 主要命令: $ git log #查看已提交内容 $ git log --pretty=oneline #查看已提交内容(紧凑版) $ git reset --hard HEAD^ #回退到上一版本 $ git reset --hard 3628164 #回退到版本3628164 $ git reflog #查看提交过的命令 5. 版本回退 5.1 repo会记录每次提交的版本,用户也可以随时回退到任何版本.比如以下三个readme.txt版本 版本1

[k]廖雪峰Git教程-笔记

-------------------------- 廖雪峰Git教程-------------------------- 01:安装Git在Windows上安装Git,官网下载,然后按默认选项安装即可;右键菜单->“Git Bash”->弹出一个命令窗口;安装完成后,还需要最后一步设置,在命令行输入:$ git config --global user.name "Your Name"$ git config --global user.email "[emai

30分钟新手git教程

本文转载自:http://igeekbar.com/igeekbar/post/82.htm Git近些年的火爆程度非同一般,这个版本控制系统被广泛地用在大型开源项目(比如Linux),不同规模的团队开发,以及独立开发者,甚至学生之中. 初学者非常容易被git里的各种命令.参数吓得不愿意继续去学.但实际上刚上手的时候,你并不需要了解所有命令的用途.你可以从掌握一些简单.常用又强大的命令开始,然后逐步去学习.这就是我们这篇文章要讲的内容.让我们快开始吧! 基本了解 Git是一些命令行工具的集合,可

git常用命令,参照廖雪峰老师的git教程

git的常用命令 写在开篇: 作为一个菜鸟,我想学习的最好的方式就是边学边记笔记,这里只是本人写的自己通过学习了廖雪峰老师的git教程之后自己做的笔记,个人理解,可能有失偏颇,如想学习更专业更权威的git知识,请移步廖雪峰老师的官网 一.创建git仓库 1.git init  在本地创建一个空的仓库 2.在远程创建一个项目仓库,gitHub内操作 git remote add origin ***** 通过这两个步骤,就将本地仓库与远程仓库关联起来,然后在本地coding,提交代码到远程.也可以

Git教程_持续更新

Git教程 更新12/14/2017 5:21:57 PM 更新11/22/2017 6:27:24 PM 写在前面,在heroku上部署了python web应用,迎合大众,所有操作都是在Ubuntu上操作.由于git版本管理没有掌握好,在Ubuntu和Windows上面的命令有一定的不同,造成了迥异的报错.现整理归类一下: 方法一 在电脑本地生成ssh,并添加ssh keys到GitHub设置中.如此,电脑可以和GitHub repository进行通信. 1.ssh-keygen -t r