瞭解 Git 歷程記錄

Git 以與集中式版本控制系統(CVCS)基本不同的方式來代表歷程記錄,例如 Team Foundation 版本控制、Perforce 或 Subversion。 集中式系統會將每個檔案的個別歷程記錄儲存在存放庫中。 Git 會將歷程記錄儲存為整個存放庫的快照集圖表。 這些快照集稱為 Git 中的認可 ,可以有多個父代,建立看起來像圖形而非直線的歷程記錄。 這段歷史差異非常重要,而且是熟悉 CVCS 的用戶發現 Git 混淆的主要原因。

認可歷程記錄基本概念

從簡單的歷程記錄範例開始:具有三個線性認可的存放庫。

Three commits in a line

認可 A 是認可 B 的父代,而認可 B 是認可 C 的父代。此歷程記錄看起來與 CVCS 非常類似。 指向認可 C 的箭號是分支。 分支是特定認可的指標,這就是為什麼分支在 Git 中是如此羽量且容易。

相較於 CVCS,Git 的主要差異在於開發人員有自己的存放庫完整復本。 他們需要從遠端存放庫取得最新的認可,讓本機存放庫與遠端存放庫保持同步。 若要這樣做,他們會使用下列命令提取 main 分支:

git pull origin main

這會合併遠端存放庫中主要分支的所有變更,依預設會使用 Git 名稱 origin 。 此提取帶來了一個新的認可,而本機存放庫中的主要分支會移至該認可。

A fourth commit, D, is added to the line

瞭解分支歷程記錄

現在是時候變更程序代碼了。 在平行處理不同功能時,通常會有多個作用中分支。 這與 CVCS 形成鮮明對比,其中新分支繁重且很少建立。 第一個步驟是使用下列命令簽出至新的分支:

git checkout -b cool-new-feature

這是結合兩個命令的快捷方式:

  • git branch cool-new-feature 建立分支
  • git checkout cool-new-feature 開始在分支中工作

Branch cool-new-feature is added

兩個分支現在指向相同的認可。 假設在兩個新的認可 E 和 F 中 cool-new-feature ,分支上有一些變更。

Add commits to a branch

認可可透過 cool-new-feature 分支存取,因為它們已認可至該分支。 完成此功能之後,它必須合併到main分支中。 若要這樣做,請使用下列命令:

git merge cool-new-feature main

Merge a branch

當合併時,記錄的圖表結構就會變成可見。 當分支合併至另一個分支時,Git 會建立新的認可。 這是合併認可。 由於沒有衝突,因此未包含此合併認可的任何變更。 如果發生衝突,合併認可會包含解決它們所需的變更。

真實世界的歷史

以下是 Git 歷程記錄的範例,更類似於小組作用中開發中的程式碼。 有三個人會同時將自己的分支認可合併到 main 分支。

Console log of git graph

下一步

深入瞭解如何在 GitHubAzure ReposGit 記錄歷程記錄簡化中使用 Git 歷程記錄。