1. 程式人生 > >git的遠端倉庫版本回退失敗問題

git的遠端倉庫版本回退失敗問題

注意:遠端倉庫回退是一件很嚴謹的事情,如果一個專案是多個成員協作,回退之前一定要溝通好,回退期間不要讓其他人向倉庫push程式碼或者進行其它回退之類的操作。

如果將錯誤的程式碼失手提交到了遠端倉庫是一種很尷尬的事情,這裡給出兩套方案,親測基本可以解決遠端倉庫版本回退問題。

這裡以遠端倉庫的develop分支為例介紹

方案一:

檢視歷史版本

git log 

根據需要回退的版本號進行本地回退

git reset --hard commitid

然後強制推送到遠端倉庫(必須強制推送因為現在本地版本落後於遠端倉庫版本,不使用強制推送無法push)

git add .

git commit -m 'hehe'

git push -f origin develop

但是這種情況有時候會失敗,如果push失敗可以使用下面的方案

方案二:

檢視歷史版本

git log 

根據需要撤銷某次提交

1、git revert HEAD        撤銷最後一次提交

2、git revert commitid     撤銷某一次提交

然後強制推送到遠端倉庫

git add .

git commit -m 'hehe'

git push -f origin develop

git revert 和 git reset的區別 
1. git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。 
2. 在回滾這一操作上看,效果差不多。但是在日後繼續merge以前的老版本時有區別。因為git revert是用一次逆向的commit“中和”之前的提交,因此日後合併老的branch時,導致這部分改變不會再次出現,但是git reset是之間把某些commit在某個branch上刪除,因而和老的branch再次merge時,這些被回滾的commit應該還會被引入。 
3. git reset 是把HEAD向後移動了一下,而git revert是HEAD繼續前進,只是新的commit的內容和要revert的內容正好相反,能夠抵消要被revert的內容。

注:個人建議遠端倉庫的版本回退還是使用revert先進行本地回退再推送到遠端倉庫比較好,如果只是原生代碼回退不涉及遠端倉庫的話兩者差不多。