如何回退已經合併的master代碼?
在CodeUp(一個代碼託管平臺,類似於GitLab、GitHub等)上撤銷已經合併到master分支的提交,你需要遵循以下基本步驟:
- 回滾 master 分支:
- 如果你想要撤銷整個合併操作並恢復到合併前的狀態,你可以執行一個反向合併(revert merge)。在Git中,這通常通過創建一個新的提交來實現,這個提交的內容與你要撤回的合併相反。
# 在本地master分支
git checkout master
git revert -m 1 <合併提交的SHA-1哈希值>
git push origin master
-m 1
參數告訴Git選擇合併提交的第一個父提交作爲基準,這樣可以保持原有的分支歷史記錄清晰。
- 交互式重置或變基(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
- 在協作環境中處理:
- 由於撤銷合併操作會改變項目歷史,這可能會對其他開發者的本地分支造成影響。因此,在執行之前,請確保溝通清楚,並考慮是否有更好的方式解決衝突或修復錯誤,而不是簡單地撤銷合併。
請注意,具體的命令和流程可能會根據所使用的代碼託管服務的功能有所不同。請謹慎操作,尤其是涉及force push時,因爲它會覆蓋遠程倉庫的歷史記錄。在實際操作前,建議備份相關數據,並充分了解團隊的Git工作流和政策。
我的遠程master不允許 push
如果你的遠程master
分支設置了保護,不允許直接push,那麼在執行git revert
並嘗試推送到遠程時可能會遇到權限問題。在這種情況下,你需要按照以下步驟操作:
- 創建一個撤銷合併的Pull Request:
- 在本地執行
git revert
操作生成新的提交。
git checkout master
git revert -m 1 <合併提交的SHA-1哈希值>
- 推送這個新的提交到一個新的分支:
git checkout -b revert-merge
git push origin revert-merge
- 在代碼託管平臺(如GitHub、GitLab)上創建Pull Request:
- 登錄到你的代碼託管服務,找到你剛纔推送的
revert-merge
分支,並基於它創建一個新的Pull Request,目標分支爲master
。
- 等待審查和合並:
- 等待項目維護者或者其他有權限的團隊成員對你的Revert PR進行審查,確認無誤後他們會將這個PR合併到
master
分支上。
這樣可以確保即使遠程master
分支受到保護,也能通過協作流程完成撤銷合併的操作。同時,請務必與團隊溝通這種操作的目的和影響,以確保符合團隊工作流程。
歡迎關注公-衆-號【TaonyDaily】、留言、評論,一起學習。
Don’t reinvent the wheel, library code is there to help.
文章來源:劉俊濤的博客
若有幫助到您,歡迎點贊、轉發、支持,您的支持是對我堅持最好的肯定(_)