如何將一個分支上的多項功能代碼分離到不同分支
更新日期: 2024 年 12 月 22 日
本文為 Git 提交拆解案例探討,第 1 篇:
- 如何將一個分支上的多項功能代碼分離到不同分支 👈 所在位置
- 用導航地圖比喻理解 Git 的 Commit 與 reset 操作邏輯
- 初學者指南:如何使用 git cherry-pick 挑選特定提交
- Git 推送失敗的解決方案:non-fast-forward 問題指南
當你在開發中,不小心將多項功能的代碼提交到同一個分支上,可能會導致後續的合併和管理變得困難。
這篇文章將帶你一步步學習,如何將分支中的多項功能代碼分離到對應的分支,並保持清晰的提交歷史。
我們將使用簡單的命令與 ASCII 圖示來幫助你理解。
問題概述
目前你的分支 issues/40
包含了兩部分代碼:
- 搜尋結果頁代碼(應屬於分支
issues/31
)。 - 收藏模型代碼(應屬於分支
issues/19
)。
當前狀態
分支 issues/40:
├── 提交1: 搜尋結果頁代碼 (應該屬於 issues/31)
├── 提交2: 收藏模型代碼 (應該屬於 issues/19)
目標
將以上代碼拆分至:
- 分支
issues/31
:只包含 搜尋結果頁代碼。 - 分支
issues/19
:只包含 收藏模型代碼。
解決步驟
準備工作:查看提交歷史
首先,我們需要確認分支上的提交歷史,使用以下命令查看:
git log --oneline
範例輸出:
b123456 (HEAD -> issues/40) feat: add favorite model code <- 收藏模型代碼
a789012 feat: add search result page code <- 搜尋結果頁代碼
確認:
a789012
是搜尋結果頁代碼的提交,b123456
是收藏模型代碼的提交。
創建新分支
分別為兩部分代碼創建新分支。
創建分支 issues/31
git branch issues/31
創建分支 issues/19
git branch issues/19
將搜尋結果頁代碼移至 issues/31
切換到 issues/31
git switch issues/31
回退到搜尋結果頁代碼
git reset --hard a789012
現在,分支 issues/31
的狀態如下:
分支 issues/31:
├── 提交1: 搜尋結果頁代碼
推送到遠端
git push origin issues/31
將收藏模型代碼移至 issues/19
切換到 issues/19
git switch issues/19
Cherry-pick 收藏模型代碼
git cherry-pick b123456
現在,分支 issues/19
的狀態如下:
分支 issues/19:
├── 提交1: 收藏模型代碼
推送到遠端
git push origin issues/19
清理原始分支 issues/40
完成代碼拆分後,原始分支 issues/40
不再需要,可以刪除:
git branch -D issues/40
最終結果
分支 issues/31:
├── 提交1: 搜尋結果頁代碼
分支 issues/19:
├── 提交1: 收藏模型代碼
操作背後的邏輯
- 重置(reset)與挑選(cherry-pick):
- 重置讓你回退到特定提交,適合「回溯歷史」操作。
- Cherry-pick 用於提取單一提交,應用到其他分支。
- 創建新分支:
- 保留每個功能的提交歷史,避免原分支混亂。
- 刪除原分支:
- 已完成代碼拆分,刪除冗余分支減少混淆。
結語
通過以上方法,你可以輕鬆地將同一分支中的多項功能代碼分離到對應的分支。
這樣的操作能幫助你維持清晰的提交歷史,提高版本管理的效率。
如果你在操作中遇到問題,歡迎隨時查詢指令幫助或尋求更多協助!