简单谈谈Git中的回滚操作

所属分类: 网络编程 / 相关技巧 阅读数: 1041
收藏 0 赞 0 分享

首先介绍下场景

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

找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

总结

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

更多精彩内容其他人还在看

程序员编程从初级到中级的10个秘诀

在一封与TechRepublic会员交流的邮件当中,他提到了面向程序员的博客、文章及杂志分成两类:面向初学者类(“hello world”这种类型的教程)以及面向专家类(MSDN杂志)。
收藏 0 赞 0 分享

关于换行和回车的图文小结

不知道大家用这么多年的电脑,写了这么多的程序,对换行和回车有没有一个认识
收藏 0 赞 0 分享

回车和换行有什么区别?我们平时按下的Enter键是回车还是换行

如果用过机械打字机,就知道回车和换行的区别了。换行就是把滚筒卷一格,不改变水平位置。回车就是把水平位置复位,不卷动滚筒
收藏 0 赞 0 分享

网络编程之get与post的区别与联系

这里来说说get与post的区别与联系,对这方面不懂的鹏哟可以参考下。
收藏 0 赞 0 分享

Web开发人员常用速查手册 英文集合推荐

不管你是多么优秀的程序员,你都不可能记住一切。在你编写程序的过程中碰到问题需要查阅手册的时候,若有现成的手册可参考则可以为你节省很多时间。
收藏 0 赞 0 分享

vs快捷键 用好Ctrl+Enter与Ctrl+Shift+Enter组合键让你的编辑代码速度快了很多

使用Ctrl+Enter组合键在上方插入一行,使用Ctrl+Shift+Enter组合键在下方插入一行
收藏 0 赞 0 分享

对Web开发人员有用的8个网站小结

本文是由比利时的Web开发人员Jean-Baptiste Jung分享的,Jung还在《Web开发/设计人员应当知道的15个网站》这篇文章中推荐了15个相关网站
收藏 0 赞 0 分享

Web开发/设计人员应当知道的15个网站

建个好网站绝非易事,工欲善其事必先利其器。本文编译了15个极其有用的网站,任何一位网站开发者或设计人员都应该收藏起来
收藏 0 赞 0 分享

Application,Session,Cookies对象应用介绍

Application,Session,Cookies对象比较,对于客户端保存登录信息的朋友可以参考下。
收藏 0 赞 0 分享

设计高可用和高负载的网站系统的几个注意事项

随着网站的运营,用户访问量和数据存储量会随着时间发生几何级变化,很快整个系统不堪重负,频繁出现问题。
收藏 0 赞 0 分享
查看更多