返回課程
AI016 Professional

Ry 的 Git 教學

一份全面的 Git 版本控制指南,從基本的工作流程(如暫存和提交)出發,逐步深入至進階主題,包括互動式重基、遠端協作,以及 Git 物件資料庫內部機制的剖析。

4.9
39.0h
983 學習者
0 讚好
人工智能
開始學習

課程總覽

📚 內容概要

一本全面的 Git 版本控制指南,從基本的工作流程(如暫存與提交)逐步深入至高階主題,包括互動式重基、遠端協作,以及 Git 物件資料庫的內部機制。

從指令到核心內部,全面掌握全球最流行的版本控制系統。

作者: Ryan Hodson

致謝: 前言中未明確提及任何致謝對象。

🎯 學習目標

  1. 比較並對比本地、集中式與分散式版本控制系統。
  2. 了解為何因應 Linux 核心開發需求而創建 Git。
  3. 完成基本 Git 設定,包括安裝驗證、倉儲初始化與檔案追蹤。
  4. 初始化 Git 倉儲,並識別 .git 目錄的角色。
  5. 設定全域使用者設定,並使用暫存區追蹤專案檔案。
  6. 執行提交以建立專案快照,並透過倉儲歷史檢視成果。
  7. 使用提交 ID 定位特定歷史版本,並返回目前專案狀態。
  8. 建立與管理帶註解的標籤,以標示穩定的發布版本。
  9. 使用 git revert 撤銷特定已提交的變更,同時維持清晰透明的歷史記錄。
  10. 使用 Git CLI 來識別、建立與切換分支。

🔹 第一課:版本控制的歷史與基礎

概述: 本課追溯版本控制從手動檔案管理演進至複雜分散式系統的歷程。詳細說明本地、集中式與分散式版本控制系統(VCS)之間的架構差異,並解釋促使 Git 為 Linux 核心而誕生的具體歷史背景。學員將學習安裝 Git 及初始化第一個倉儲的基礎步驟。

學習成果:

  • 比較並對比本地、集中式與分散式版本控制系統。
  • 了解為何因應 Linux 核心開發需求而創建 Git。
  • 完成基本 Git 設定,包括安裝驗證、倉儲初始化與檔案追蹤。

🔹 第二課:掌握基礎:暫存與提交

概述: 本課介紹 Git 倉儲的基礎生命週期,從標準專案資料夾轉化為受版本控制的環境。學員將學習如何初始化倉儲、設定使用者身分、追蹤新檔案,並管理變更從暫存區轉移到永久提交歷史的過程。

學習成果:

  • 初始化 Git 倉儲,並識別 .git 目錄的角色。
  • 設定全域使用者設定,並使用暫存區追蹤專案檔案。
  • 執行提交以建立專案快照,並透過倉儲歷史檢視結果。

🔹 第三課:還原變更與瀏覽歷史

概述: 本課介紹在倉儲中進行時間旅行的核心 Git 技巧,讓開發者得以檢視過去狀態、標記里程碑,並安全地還原錯誤。學員將精通於在不造成永久變更的情況下檢視舊版修訂,使用帶註解的標籤標示發行版本,並區分還原已提交歷史與清除尚未提交的實驗性工作。

學習成果:

  • 使用提交 ID 定位特定歷史版本,並返回目前專案狀態。
  • 建立與管理帶註解的標籤,以標示穩定的發行版本。
  • 使用 git revert 撤銷特定已提交的變更,同時維持透明的歷史記錄。

🔹 第四課:基本分支與合併操作

概述: 本課探討 Git 分支的基本生命週期,從概念上的獨立開發線,到實際執行。學員將學習如何建立、導航與可視化分叉的專案歷史,最終透過快速前進合併(fast-forward merge)與三方合併(3-way merge)整合工作,並清理臨時分支。

學習成果:

  • 使用 Git CLI 來識別、建立與切換分支。
  • 解讀分叉專案歷史圖表,理解 master 分支與功能分支之間的關係。
  • 執行並區分「快速前進」合併與「三方」合併。

🔹 第五課:進階分支與衝突解決

概述: 本課探討因專案歷史分歧所必需的進階 Git 操作。內容涵蓋三方合併的理論機制、使用 -a 選項簡化提交的實用技巧,以及長時間運作的功能分支管理。學員將學習如何處理複雜的分支互動、手動解決合併衝突,並透過正確的分支清理維持倉儲整潔。

學習成果:

  • 解釋快速前進合併與三方合併之間的結構差異。
  • 使用 -a 選項將暫存與提交動作合併於已追蹤的檔案上。
  • 透過解析 Git 衝突標記,識別並解決合併衝突。

🔹 第六課:以重基維持線性專案歷史

概述: 本課介紹維持乾淨、線性專案歷史的技術,包括移動與壓縮提交。學員將掌握從分歧分支轉換為統一時間軸的方法,使用標準重基、互動式重基(合併小提交)及過程中修改特定提交的能力。完成本模組後,學員將理解如何消除不必要的合併提交,呈現專業且精簡的提交日誌。

學習成果:

  • 將功能分支的基礎移動至另一分支的最新版本,以支援快速前進合併。
  • 使用互動式重基將多個小提交壓縮為單一有意義的快照。
  • 在重基過程中使用 edit--amend 功能修改既有提交。

🔹 第七課:改寫歷史與 Reflog 的安全性

概述: 本課探討維持乾淨專業專案歷史的進階 Git 技巧。學員將掌握「互動式重基」以改寫過去提交,學習精確的流程將一般提交拆解為細微更新,並利用「Reflog」作為強大的安全網,恢復看似遺失的資料。

學習成果:

  • 執行互動式重基,以修改、編輯或拆分歷史提交。
  • 使用 git reset --mixed 將單一一般提交拆解為多個獨立且有意義的提交。
  • 使用 Git Reflog 找出並復活不再連結至分支的「懸空提交」。

🔹 第八課:透過推送與取得進行協作

概述: 本課探討多人協作在 Git 中的基本工作流程。你將學習如何建立獨立的倉儲複本、設定本地身分以模擬不同使用者,並建立「遠端」連接以交換程式碼。課程重點在於理解如何在倉儲間拉取資料(fetch)與推送資料(push),以同步開發進度。

學習成果:

  • 複製與設定: 成功複製倉儲並設定本地層級的使用者配置。
  • 同步遠端: 新增遠端書籤,並使用 fetchmerge 整合其他開發者的變更。
  • 管理遠端狀態: 导航遠端分支,並理解當檢視非本地代碼時的「脫離頭指針」(detached HEAD)狀態。

🔹 第九課:集中式共用倉儲模型

概述: 本課探討從點對點倉儲共享轉向集中式工作流程的過渡。學員將學習如何建立「裸倉儲」作為溝通中心,重新配置遠端以適應團隊環境,並管理多個開發者之間的變更同步(推送與拉取),以維持一致的專案歷史。

學習成果:

  • 初始化並設定裸倉儲,作為中央伺服器。
  • 管理遠端連接,將本地工作流程導向集中式中心。
  • 執行標準化工作流程,以更新共用內容並使用 fetch、rebase 與 merge 來解決分歧歷史。

🔹 第十課:分散式整合者模型

概述: 本課探討從集中式版本控制轉向使用 Bitbucket 作為主機平台的分散式整合者模型。學員將從設定公開倉儲開始,逐步掌握一個複雜的工作流程:由「整合者」審查並合併來自同儕開發者公開倉儲的貢獻,進而形成官方專案版本。

學習成果:

  • 設定 Bitbucket 帳戶,並建立公開遠端倉儲以進行分散式協作。
  • 透過管理多個遠端,執行「整合者工作流程」,包含取得、審查與合併外部貢獻。
  • 在團隊開發者之間維持私密本地環境與公開面向倉儲的同步。

🔹 第十一課:基於補丁的溝通與工作流程

概述: 本課介紹基於補丁的協作生命周期,這是一種在無需共用中央倉儲的情況下,讓開發者分享單一提交的方法。學員將學習如何從本地提交產生補丁檔案,透過電子郵件傳遞,並將收到的補丁整合至專案主分支。

學習成果:

  • 使用 git format-patch 從特定提交或分支產生單一補丁檔案。
  • 使用 git am 命令與標準輸入重定向,將外部補丁檔案套用至本地倉儲。
  • 執行完整的整合工作流程,包含在暫時分支上測試補丁,並合併至主分支。

🔹 第十二課:Git 工具、鉤子與進階差異比較

概述: 本課介紹重要的 Git 工具命令與進階倉儲管理的自訂技巧。學員將學習如何透過歸檔與封包來匯出與分享倉儲,使用 .gitignore 與 stash 保持工作空間乾淨,透過 Git 鉤子自動化工作流程,並利用進階差異比較與自訂別名優化命令列體驗。

學習成果:

  • 区分並執行倉儲匯出:歸檔(無歷史)與封包(完整歷史)。
  • 設定檔案排除規則,並管理暫時性的進行中變更。
  • 在 Git 内部鉤子系統中實現自動化腳本,並使用設定別名簡化工作流程。

🔹 第十三課:Git 水管系統:內部物件資料庫

概述: 本課深入探討 Git 友善的「瓷器」命令之下,其「水管」——低階物件資料庫。你將學習 Git 如何使用四種不同的物件類型(資料塊、樹狀結構、提交與標籤)與 SHA-1 檢核值來記錄專案歷史。完成此模組後,你將理解如何手動操作索引與物件資料庫,在不使用標準高階介面的情況下建立提交。

學習成果:

  • 定義並區分 Git 的四種物件類型:資料塊(Blobs)、樹狀結構(Trees)、提交(Commits)與標籤(Tags)。
  • 解釋 HEAD 與分支參考在指向特定提交物件中的角色。
  • 示範「水管」工作流程:手動暫存檔案、撰寫樹狀結構,並建立提交物件。