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

相關文章
相關標籤/搜索