git版本回退, github版本回退


上周提交了更改,過了周末回來說要撤銷上個story。於是,需要找到上周提交的版本,rollback回來。

git版本管理命令,自從習慣使用管理工具之后就很少接觸了,當突然尋找其他指令的時候就成漿糊了,ctrl+k只能順利的提交而無關管理。因此,工具簡化操作卻弱化了技能。就像前幾天聽到的BBC 6分鍾英語的一段對話。

Rob說他當年在酒吧實習,對錢的加減算法很熟悉很強,因為那時候計算機還沒有推廣。

計算器的出現使人們放棄了自己計算的本領。有時候即便僅僅是簡單的加減法也不願用自己的腦袋計算了。不說好壞,自己的感覺非常糟糕,因為覺得自己曾經擁有的技能消退了而難過。所以說,加強自身而不完全依賴於外物還是很重要的。

 

 

# Attention

更多Git以及Github的用法,參閱[Github工作流的正確打開方式](http://www.cnblogs.com/woshimrf/p/git-workflow.html)

 

# 結論放開頭

- 不要在公共分支做reset, 不要修改公共分支的歷史 

- 使用revert不會改變歷史,只是增加一個版本

 

1.reset

幾個月前,我提交了一次更改,這個更改涉及幾十個文件,提交到github,Jenkins build,然后health check 503 error。看着報錯我毫無頭緒,不明白health check究竟是因為代碼的哪部分造成的,這提醒我以后的錯誤日志一定要詳細。但有一點是肯定的,這次提交的更改有問題。既然上一次的代碼沒問題,那就回退吧。

我在本地,使用git reset current branch to here. 這是Intelij自帶的git管理工具,可以指定版本后,然后回退到指定版本。本質上就是 git  reset 版本號。

顯然,這個指令就是將head指針后退了一下,也就是說,當前版本是落后的。而我從master的最新一次提交reset到倒數第二個,那么我的當前的版本比maser落后一次提交。

既然回退好了,需要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

注釋:
 B3 as HEAD, B2 is HEAD~1, B1 is HEAD~2. 好的 G3 is HEAD~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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM