如何將一個分支上的多項功能代碼分離到不同分支

更新日期: 2024 年 12 月 22 日

本文為 Git 提交拆解案例探討,第 1 篇

  1. 如何將一個分支上的多項功能代碼分離到不同分支 👈 所在位置
  2. 用導航地圖比喻理解 Git 的 Commit 與 reset 操作邏輯
  3. 初學者指南:如何使用 git cherry-pick 挑選特定提交
  4. Git 推送失敗的解決方案:non-fast-forward 問題指南

當你在開發中,不小心將多項功能的代碼提交到同一個分支上,可能會導致後續的合併和管理變得困難。

這篇文章將帶你一步步學習,如何將分支中的多項功能代碼分離到對應的分支,並保持清晰的提交歷史。

我們將使用簡單的命令與 ASCII 圖示來幫助你理解。


問題概述

目前你的分支 issues/40 包含了兩部分代碼:

  1. 搜尋結果頁代碼(應屬於分支 issues/31)。
  2. 收藏模型代碼(應屬於分支 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: 收藏模型代碼

操作背後的邏輯

  1. 重置(reset)與挑選(cherry-pick)
    • 重置讓你回退到特定提交,適合「回溯歷史」操作。
    • Cherry-pick 用於提取單一提交,應用到其他分支。
  2. 創建新分支
    • 保留每個功能的提交歷史,避免原分支混亂。
  3. 刪除原分支
    • 已完成代碼拆分,刪除冗余分支減少混淆。

結語

通過以上方法,你可以輕鬆地將同一分支中的多項功能代碼分離到對應的分支。

這樣的操作能幫助你維持清晰的提交歷史,提高版本管理的效率。

如果你在操作中遇到問題,歡迎隨時查詢指令幫助或尋求更多協助!

Similar Posts