如何回退已經合併的master程式碼?

刘俊涛的博客發表於2024-03-22

如何回退已經合併的master程式碼?

在CodeUp(一個程式碼託管平臺,類似於GitLab、GitHub等)上撤銷已經合併到master分支的提交,你需要遵循以下基本步驟:

  1. 回滾 master 分支
  • 如果你想要撤銷整個合併操作並恢復到合併前的狀態,你可以執行一個反向合併(revert merge)。在Git中,這通常透過建立一個新的提交來實現,這個提交的內容與你要撤回的合併相反。
# 在本地master分支
git checkout master
git revert -m 1 <合併提交的SHA-1雜湊值>
git push origin master

-m 1 引數告訴Git選擇合併提交的第一個父提交作為基準,這樣可以保持原有的分支歷史記錄清晰。

  1. 互動式重置或變基(Rebase)
  • 如果你想更徹底地刪除合併歷史,使master分支看起來就像從未進行過那次合併,可以使用git reset或者git rebase。但這將更改專案的歷史,並需要通知團隊成員更新他們的本地副本。
# 確保不在master分支上,建立一個新的臨時分支
git checkout -b temp-rollback master

# 重置master到合併前的某個提交
git checkout master
git reset --hard <合併之前的提交SHA-1>

# 推送master分支的新版本,可能需要force push,因為歷史被更改了
git push origin +master

# 清理臨時分支
git branch -D temp-rollback
  1. 在協作環境中處理
  • 由於撤銷合併操作會改變專案歷史,這可能會對其他開發者的本地分支造成影響。因此,在執行之前,請確保溝通清楚,並考慮是否有更好的方式解決衝突或修復錯誤,而不是簡單地撤銷合併。

請注意,具體的命令和流程可能會根據所使用的程式碼託管服務的功能有所不同。請謹慎操作,尤其是涉及force push時,因為它會覆蓋遠端倉庫的歷史記錄。在實際操作前,建議備份相關資料,並充分了解團隊的Git工作流和政策。

我的遠端master不允許 push

如果你的遠端master分支設定了保護,不允許直接push,那麼在執行git revert並嘗試推送到遠端時可能會遇到許可權問題。在這種情況下,你需要按照以下步驟操作:

  1. 建立一個撤銷合併的Pull Request
  • 在本地執行git revert操作生成新的提交。
git checkout master
git revert -m 1 <合併提交的SHA-1雜湊值>
  1. 推送這個新的提交到一個新的分支
git checkout -b revert-merge
git push origin revert-merge
  1. 在程式碼託管平臺(如GitHub、GitLab)上建立Pull Request
  • 登入到你的程式碼託管服務,找到你剛才推送的revert-merge分支,並基於它建立一個新的Pull Request,目標分支為master
  1. 等待審查和合並
  • 等待專案維護者或者其他有許可權的團隊成員對你的Revert PR進行審查,確認無誤後他們會將這個PR合併到master分支上。

這樣可以確保即使遠端master分支受到保護,也能透過協作流程完成撤銷合併的操作。同時,請務必與團隊溝通這種操作的目的和影響,以確保符合團隊工作流程。



歡迎關注公-眾-號【TaonyDaily】、留言、評論,一起學習。

公眾號

Don’t reinvent the wheel, library code is there to help.

文章來源:劉俊濤的部落格


若有幫助到您,歡迎點贊、轉發、支援,您的支援是對我堅持最好的肯定(_)

相關文章