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先進行本地回退再推送到遠端倉庫比較好,如果只是原生代碼回退不涉及遠端倉庫的話兩者差不多。