git版本回退, github版本回退

上周提交了更改,过了周末回来讲要撤销上个story。因而,须要找到上周提交的版本,rollback回来。html

git版本管理命令,自从习惯使用管理工具以后就不多接触了,当忽然寻找其余指令的时候就成浆糊了,ctrl+k只能顺利的提交而无关管理。所以,工具简化操做却弱化了技能。就像前几天听到的BBC 6分钟英语的一段对话。git

Rob说他当年在酒吧实习,对钱的加减算法很熟悉很强,由于那时候计算机尚未推广。github

计算器的出现令人们放弃了本身计算的本领。有时候即使仅仅是简单的加减法也不肯用本身的脑壳计算了。不说好坏,本身的感受很是糟糕,由于以为本身曾经拥有的技能消退了而难过。因此说,增强自身而不彻底依赖于外物仍是很重要的。算法

 

 

# Attention

更多Git以及Github的用法,参阅[Github工做流的正确打开方式](http://www.cnblogs.com/woshimrf/p/git-workflow.html)缓存

 

# 结论放开头

- 不要在公共分支作reset, 不要修改公共分支的历史 工具

- 使用revert不会改变历史,只是增长一个版本post

 

1.reset

几个月前,我提交了一次更改,这个更改涉及几十个文件,提交到github,Jenkins build,而后health check 503 error。看着报错我毫无头绪,不明白health check到底是由于代码的哪部分形成的,这提醒我之后的错误日志必定要详细。但有一点是确定的,此次提交的更改有问题。既然上一次的代码没问题,那就回退吧。ui

我在本地,使用git reset current branch to here. 这是Intelij自带的git管理工具,能够指定版本后,而后回退到指定版本。本质上就是 git  reset 版本号。url

显然,这个指令就是将head指针后退了一下,也就是说,当前版本是落后的。而我从master的最新一次提交reset到倒数第二个,那么个人当前的版本比maser落后一次提交。spa

既然回退好了,须要merge到master上面。对应到github上就是pull request.然而,当我选择pull request的时候显示nothing.说本次更改不用merge。也就是说master的历史中已经包含了这个版本,因此不用merge。

所以,若是想要合并分支,那么要合并的分支必须比当前分支的版本先进。显然,reset只能重置本地或者说本分支的更改。那么,我若是想要mater回退,我必须提交一个比mater先进并且内容正好的是上一次提交的相反的修改。这就是revert干的事情。

 

2.revert

revert指定版本能够实现版本回退。这个不是像reset同样指针回退,而是会建立一个新的提交,并且将指定版本的修改逆过来。这样,咱们想回退的内容被逆反修改过来了,并且咱们的版本比master先进。这样就能够直接提交了。

 

 

具体作法:

假设当前git log为:

G1 - G2 - G3 - B1 - B2 - B3

 G1-G3 正确的,好的,但  B1-B3 须要丢弃。

若是这些log都是在本地分支,那么可使用reset:

$ git reset --hard HEAD~3

注释:
  as ,  is ,  is . 好的  is :B3HEADB2HEAD~1B1HEAD~2G3HEAD~3
G1 - G2 - G3 - B1 - B2 - B3
           \    \ \ \-- HEAD \ \ \------ HEAD~1 \ \---------- HEAD~2 \-------------- HEAD~3



可是若是这些log提交已经在远程分支了,那就只能使用
 revert:
$ git revert --no-commit HEAD~2^..HEAD

Or:

$ git revert --no-commit HEAD~3..HEAD


注释:
--no-commit是说虽然HEAD~2到HEAD的提交已经被回滚了,但回滚的内容会放在缓存区,须要stage后commit才能生效。
这里,"start..end"的意思是不包含start,包含end。




注意

1. Merge操做不能revert
2. 对于使用IDEA作开发的,推荐使用IDEA自带的回退。查看log,而后点击须要回退的文件,右键revert。
3. 回退要慎重,很容产生冲突。


参考

git代码回滚:Reset、Checkout、Revert的选择

Git - how to revert multiple recent commits

相关文章
相关标签/搜索