简单谈谈Git中的回滚操作_相关技巧

首先介绍下场景

首先,一定要想清楚,自己想干什么。

找redis源码作为例子,查看所在的分支git branch

 3.0
 3.2
* unstable

取前5条commit看看

git log --pretty=format:"%h - %an, %ar : %s" -5
e9d861e - antirez, 27 hours ago : Clear child data when opening the pipes.
e565632 - antirez, 27 hours ago : Child -> Parent pipe for COW info transferring.
e1eccf9 - antirez, 31 hours ago : zmalloc: Make fp var non local to fix build.
945a2f9 - antirez, 31 hours ago : zmalloc: zmalloc_get_smap_bytes_by_field() modified to work for any PID.
b13759e - antirez, 31 hours ago : redis-cli: "allocator-stats" -> "malloc-stats".

临时切换到某个commit

有可能你并不需要回滚代码,你只想将代码库暂时切换到之前的某个版本,看看那个时候的实现,然后回来继续写之前没有完成的任务。比如想看看945a2f9这个commit,执行操作

git checkout 945a2f9
Note: checking out '945a2f9'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

 git checkout -b <new-branch-name>

HEAD is now at 945a2f9... zmalloc: zmalloc_get_smap_bytes_by_field() modified to work for any PID.

再执行git branch

* (HEAD detached at 945a2f9)
 3.0
 3.2
 unstable

可以看到处于一个临时的分支上面,如果想以这个分支作为基础开发新的功能,可以创建一个新的分支进行开发。

git checkout -b old-bottle 945a2f9

如果想回到之前的的分支,只要checkout回去就好了。

当然如果在切回以前的commit的之前已经改了一些代码,可能不会那么顺利地切到之前的commit,可以

     使用reset将修改了的代码丢弃

     stash->checkout->stash pop将修改的代码找回来

     生成一个新的分支用于保存修改的代码

删除未发布的提交

如果确定要删除某几个commit,并且那几个commit的代码还没有提交到远程版本库里的话。

可以这样

git reset --hard 945a2f9

HEAD is now at 945a2f9 zmalloc: zmalloc_get_smap_bytes_by_field() modified to work for any PID.

再查看git log,就已经看不到945a2f9之前的commit记录了。

当然如果想保存当前没有提交的代码,可以和之前一样使用stash

git stash
git reset --hard 945a2f9
git stash pop

注意:

reset --hard 一定要慎用!!

这回让你彻底丢失本地的代码(除非有备份过)

删除已发布的提交

假设代码已经提交到远程版本库了,这时应该使用revert命令,revert命令实际是提交一个新的commit来回滚之前的commit。还是以945a2f9为例,现在想让代码会滚到945a2f9的状态,那么需要revert掉之前的commit

git revert e9d861e e565632 e1eccf9

或者可以这样做,revert掉HEAD的前三个commit

git revert HEAD~3..HEAD

之后就可以将现在的HEAD push到版本库了。

如果发现之前revert操作错了,可以再执行一次revert来取消上次的revert

总结

以上就是这篇文章的全部内容了,本文只是简单讲了一些我个人的一些操作实践。希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索git
, 回滚
, 回滚到某个commit
代码回滚
git 回滚到某个版本、git 回滚、git 回滚到某个commit、git 回滚到上一个版本、git 代码回滚,以便于您获取更多的相关知识。

时间: 2024-09-25 18:30:14

简单谈谈Git中的回滚操作_相关技巧的相关文章

简单谈谈GET和POST有什么区别_相关技巧

如果有人问你,GET和POST,有什么区别?你会如何回答? 真实案例      前几天有人问我这个问题.我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用.     这个答案好像并不是他想要的.于是他继续追问有没有别的区别?我说这就是个名字而已,如果服务器支持,他完全可以把GET改个名字叫GET2.他反问道,那就是单纯的名字上的区别喽?我想了想,我觉得如果说再具体的区别,只能去看RFC文档了,还要取决于服务器(指Apache,IIS)的具体实现.但我不得不承认,我的确没有仔细看过

在.NET2.0中使用自定义事务操作_实用技巧

.net 2.0 framework 中新增了 System.Transactions 命名空间,其中提供的一系列接口和类使得在.net 2.0 中使用事务比起从前要方便了许多.有关在 .net 2.0 下操作数据库事务的文章已经有了很多,这里只提一下如何设计自定义事务操作. 一.事务使用基础 先看一段使用事务的代码: 1using (TransactionScope ts= new TransactionScope())2{3 //自定义操作4 ts.Complete();5} 这里使用 us

.Net项目中一些常用验证操作_实用技巧

       在项目中需要对用户输入的信息,以及一些方法生成的结果进行验证,一般在项目中较多的采用js插件或js来进行有关信息的校验,但是从项目安全性的角度进行考虑,可对系统进行js注入.        如果在后台对用户输入的信息进行验证会相对的安全,在出现信息验证不合法时,可以直接在程序中抛出异常,终止程序的运行.        现在提供几种较为常用的验证方法,可以减少在项目中开发时间和错误性: 1.判断域名: /// <summary> /// 普通的域名 /// </summary

Git 教程之基本操作详解_相关技巧

Git 基本操作 Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比.本章将对有关创建与提交你的项目快照的命令作介绍. 获取与创建项目命令 git init 用 git init 在目录中创建新的 Git 仓库. 你可以在任何时候.任何目录中这么做,完全是本地化的. 在目录中执行 git init,就可以创建一个 Git 仓库了.比如我们创建 runoob 项目: $ mkdir runoob $ cd runoob/ $ git init Initialized empty Git

简单谈谈php中ob_flush和flush的区别_php技巧

ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑- 其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情.. ob_*系列函数, 是操作PHP本身的输出缓冲区. 所以, ob_flush是刷新PHP自身的缓冲区. 而flush, 严格来讲, 这个只有在PHP做为apache的Module(handler或者filter)安装的时候, 才有实际作用. 它是刷新WebServer(可以认为特指apache)的缓冲区.

简单谈谈php中的unicode和utf8编码_php技巧

重新认识unicode和utf8编码 直到今天,准确的说是刚才,我才知道UTF-8编码和Unicode编码是不一样的,是有区别的囧 他们之间是有一定的联系的,看看他们的区别: UTF-8的长度是不一定的,有可能是1.2.3字节 Unicode长度一定,2个字节(USC-2) UTF-8可以和Unicode互相转换 unicode和utf8的关系 Unicode(16进制) UTF-8(二进制) 0000 - 007F 0xxxxxxx 0080 - 07FF 110xxxxx 10xxxxxx

Git的使用规范流程总结_相关技巧

下面是ThoughtBot 的Git使用规范流程.我从中学到了很多,推荐你也这样使用Git. 第一步:新建分支 首先,每次开发新功能,都应该新建一个单独的分支. # 获取主干最新代码 $ git checkout master $ git pull # 新建一个开发分支myfeature $ git checkout -b myfeature 第二步:提交分支commit 分支修改后,就可以提交commit了. $ git add --all $ git status $ git commit

在Linux下搭建Git服务器的方法详解_相关技巧

前言 GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用. 我打算自己搭建git服务器.虽然目前已经有很不错的git工具,如github,coding.net等,但是为了安全,减少限制和开销,还是放在自己的服务器为好.下面给出安装配置的过程,有问题欢迎讨论和交流,我会及时回复的. 第一步 安装git:可以通过命令的方式快速安装,不同的linux的安装方法可能不

Git 教程之标签详解_相关技巧

Git 标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签. 比如说,我们想为我们的 w3cschoolcc 项目发布一个"1.0"版本. 我们可以用 git tag -a v1.0 命令给最新一次提交打上(HEAD)"v1.0"的标签. -a 选项意为"创建一个带注解的标签". 不用 -a 选项也可以执行的,但它不会记录这标签是啥时候打的,谁打的,也不会让你添加个标签的注解. 我推荐一直创