
- Git 入門
- Git - 首頁
- Git - 版本控制
- Git - 基本概念
- Git - 命令列
- Git - 安裝
- Git - 首次設定
- Git - 基本命令
- Git - 獲取幫助
- Git - 工具
- Git - 速查表
- Git - 術語
- Git 分支
- Git - 簡述分支
- Git - 建立新分支
- Git - 切換分支
- Git - 分支與合併
- Git - 合併衝突
- Git - 管理分支
- Git - 分支工作流程
- Git - 遠端分支
- Git - 追蹤分支
- Git - 變基
- Git - 變基與合併
- Git - 合併提交
- Git 操作
- Git - 克隆操作
- Git - 標籤操作
- Git - 別名操作
- Git - 提交操作
- Git - 暫存操作
- Git - 移動操作
- Git - 重新命名操作
- Git - 推送操作
- Git - 拉取操作
- Git - Fork 操作
- Git - 修補程式操作
- Git - 差異操作
- Git - 狀態操作
- Git - 日誌操作
- Git - HEAD 操作
- Git - origin master
- Git 撤銷
- Git - 撤銷更改
- Git - 切換
- Git - 恢復
- Git - 重置
- Git - 恢復操作
- Git - rm
- Git - 切換操作
- Git - cherry-pick
- Git - amend
- 伺服器上的 Git
- Git - 本地協議
- Git - 智慧 HTTP 協議
- Git - 簡單 HTTP 協議
- Git - SSH 協議
- Git - Git 協議
- Git - 在伺服器上安裝 Git
- Git - 設定伺服器
- Git - 守護程序
- Git - GitWeb
- Git - GitLab
- Git - 第三方託管選項
- 分散式 Git
- Git - 分散式工作流程
- Git - 為專案做貢獻
- Git - 維護專案
- 自定義 Git
- Git - 配置
- Git - 鉤子
- Git - 屬性
- Git - init
- Git - commit
Git 變基
在 Git 中,將一個分支的更改合併到另一個分支主要有兩種方法:**合併** 和 **變基**。
合併是透過生成一個**合併**提交來完成的,這個提交包含兩個分支的最新快照(如下圖所示的 C3 和 C4)以及它們的共同祖先(C2)。
這種方法會新增一個合併提交,但會保持分支歷史的完整性。

或者,透過在另一個分支 (C3) 上重放修改,變基允許我們將提交 (C4) 中引入的補丁應用。
**變基**是將一個分支的提交應用到另一個分支頂部的過程,通常不會生成合並提交,從而建立一個線性歷史。
如下圖所示,假設我們有一個從 **main** 分支分出的功能分支 (**feature**)。當您在 **feature** 上工作時,其他團隊成員對 **main** 分支進行了更改。您可以將分支變基到 **main** 的頂部,而不是將 **main** 合併到您的 **feature** 中並建立合併提交。此過程會重新應用您的提交,就好像它們是在 **main** 的最新更改之後進行的一樣,從而保持歷史記錄的簡潔和線性。

$ git checkout feature $ git rebase master First, rewinding head to replay your work on top of it... Applying: added staged command
變基的工作原理
執行 **git rebase** 命令時,Git 執行以下步驟:
**識別基底:** Git 查詢當前分支與我們正在變基到的分支之間的共同祖先。
**臨時儲存您的提交:** Git 儲存更改並臨時從當前分支中刪除提交。
**應用目標分支的更改:** Git 更新分支以匹配我們正在變基到的分支的狀態。
**重新應用您的提交:** Git 將提交一個接一個地應用到新的基底(即目標分支)之上。
**更新分支指標:** Git 將分支的指標更新為具有變基提交的新狀態。
讓我們看下面的例子,假設 **feature** 分支有提交 `C4`,**main** 分支有提交 `C3`。當我們將 **feature** 變基到 **main** 時,Git 將重寫歷史記錄,以便我們的分支現在看起來像是 `C4` 建立在 `C3` 之上。

對於此示例,我們將切換到 feature 分支,然後將其變基到 master 分支,如下所示:
$ git checkout feature $ git rebase main
使用變基的優勢
以下是變基的一些優勢:
**更清晰的歷史記錄:** 變基建立一個乾淨的線性歷史記錄,使跟蹤更改流程更容易。您只需要看到一條直線提交,而不是可能會使歷史記錄混亂的合併提交。
**易於閱讀:** 在與大型團隊合作時,具有多個分支和合並提交的歷史記錄可能難以理解。變基透過消除不必要的合併提交來簡化此過程。
**更好的上下文:** 變基允許您將更改置於主分支上最新程式碼的上下文中,這可以使您更容易儘早發現整合問題。
Git 中變基的風險
在 Git 中,變基可以是一個非常有用的工具,用於維護整潔有序的提交歷史記錄。
**不要變基公共歷史記錄:** 使用 Git 變基時最重要的規則之一是**永遠不要變基已與他人共享的提交**。將提交推送到遠端儲存庫(如 GitHub)後,變基它們可能會導致與同一分支上工作的其他人出現問題。相反,將變基用於您的本地分支和尚未共享的功能分支。
**衝突解決:** 當 Git 嘗試將更改應用到新的基底提交之上時,變基經常會導致衝突。發生衝突時,Git 將暫停變基過程並允許使用者手動解決衝突。解決衝突後,使用者可以使用…
git rebase --continue
如果使用者想要中止變基過程並將分支恢復到其原始狀態,可以使用…
git rebase --abort
變基最佳實踐
**將變基用於本地清理:** 變基是清理本地提交併在將其推送到共享儲存庫之前的好工具。這確保了提交歷史記錄保持整潔。
**互動式變基用於提交潤色:** 使用互動式變基來組合、重新排序或編輯提交。這允許使用者在為共享分支做貢獻時呈現乾淨且邏輯的提交歷史記錄。
**避免變基共享分支:** 不要變基已推送到共享分支的提交,因為這可能會導致其他開發人員感到困惑和衝突。
**將變基用於功能分支:** 在處理功能分支時,請使用變基使更改與主分支保持最新,尤其是在將其合併到主分支之前。
**在測試分支上練習:** 在執行復雜的變基操作之前,請在測試分支上練習或使用 Git 的 reflog 在出錯時恢復。