时间:2021-05-18
首先介绍下场景
首先,一定要想清楚,自己想干什么。
找redis源码作为例子,查看所在的分支git branch
3.0 3.2* unstable取前5条commit看看
git log --pretty=format:"%h - %an, %ar : %s" -5e9d861e - 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 945a2f9Note: checking out '945a2f9'.You are in 'detached HEAD' state. You can look around, make experimentalchanges and commit them, and you can discard any commits you make in thisstate without impacting any branches by performing another checkout.If you want to create a new branch to retain commits you create, you maydo 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 945a2f9HEAD is now at 945a2f9 zmalloc: zmalloc_get_smap_bytes_by_field() modified to work for any PID.再查看git log,就已经看不到945a2f9之前的commit记录了。
当然如果想保存当前没有提交的代码,可以和之前一样使用stash
git stashgit reset --hard 945a2f9git 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。
总结
以上就是这篇文章的全部内容了,本文只是简单讲了一些我个人的一些操作实践。希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
开发过程中,我们经常会遇到代码回滚的情况。正常人都知道,git回滚有两大宝:gitrevertgitreset当我们在本地开发,还未gitpush到远端时,可以
git删除分支和回滚的实例详解【git删除本地分支】gitbranch-Dbr【git删除远程分支】gitpushorigin:br(origin后面有空格)g
我们一般都认为TRUNCATE是一种不可回滚的操作,它会删除表中的所有数据以及重置Identity列。如果你在事务中进行TRUNCATE操作,就能回滚。反之,它
大批量执行DML语句造成回滚段大量占用,又回退操作,如何直观查询数据回滚情况?单机环境查询回滚执行进度selects.sid,r.na
在开发中,遇到了sql语句报错,但是并没有回滚的情况。经过几天的排查,终于找到了事务没有回滚的原因。原来的项目用的是informix的数据库,原来针对事务回滚的