設定與配置
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.46.1 → 2.47.0 無變更
-
2.46.0
07/29/24
- 2.44.1 → 2.45.2 無變更
-
2.44.0
02/23/24
- 2.43.2 → 2.43.5 無變更
-
2.43.1
02/09/24
-
2.43.0
11/20/23
- 2.39.1 → 2.42.3 無變更
-
2.39.0
12/12/22
- 2.36.1 → 2.38.5 無變更
-
2.36.0
04/18/22
- 2.33.1 → 2.35.8 無變更
-
2.33.0
08/16/21
- 2.30.1 → 2.32.7 無變更
-
2.30.0
12/27/20
- 2.23.1 → 2.29.3 無變更
-
2.23.0
08/16/19
- 2.22.1 → 2.22.5 無變更
-
2.22.0
06/07/19
- 2.21.1 → 2.21.4 無變更
-
2.21.0
02/24/19
- 2.19.1 → 2.20.5 無變更
-
2.19.0
09/10/18
- 2.18.1 → 2.18.5 無變更
-
2.18.0
06/21/18
- 2.15.4 → 2.17.6 無變更
-
2.14.6
12/06/19
-
2.13.7
05/22/18
-
2.12.5
09/22/17
- 2.9.5 → 2.11.4 無變更
-
2.8.6
07/30/17
-
2.7.6
07/30/17
-
2.6.7
05/05/17
- 2.5.6 無變更
-
2.4.12
05/05/17
- 2.3.10 無變更
-
2.2.3
09/04/15
- 2.1.4 無變更
-
2.0.5
12/17/14
描述
- 替代物件資料庫
- 裸儲存庫
-
裸儲存庫通常是一個適當命名的 目錄,帶有
.git
後綴,其中不包含任何受版本控制之檔案的本地檢出副本。也就是說,通常存在於隱藏的.git
子目錄中的所有 Git 管理和控制檔案都直接存在於repository.git
目錄中,而沒有其他檔案存在並被檢出。通常,公共儲存庫的發布者會提供裸儲存庫。 - blob 物件
-
未分類型的 物件,例如檔案的內容。
- 分支
-
「分支」是一條開發線。分支上最近的 提交稱為該分支的尖端。分支的尖端由分支 頭部參考,當在分支上進行其他開發時,頭部會向前移動。單個 Git 儲存庫可以追蹤任意數量的分支,但您的 工作目錄僅與其中一個分支(「當前」或「已檢出」分支)相關聯,並且 HEAD 指向該分支。
- 快取
-
已過時,請改用:索引。
- 鏈
- 變更集
-
BitKeeper/cvsps 對「提交」的說法。由於 Git 不儲存變更,而是儲存狀態,因此在 Git 中使用「變更集」一詞實際上沒有意義。
- 檢出
-
使用 樹狀物件或來自 物件資料庫的 blob 更新全部或部分 工作目錄,並在整個工作目錄已指向新的 分支時,更新 索引和 HEAD 的動作。
- 挑選提交
-
在 SCM 行話中,「挑選提交」是指從一系列變更(通常是提交)中選擇一個變更子集,並將其記錄為基於不同程式碼庫的一系列新變更。在 Git 中,這是透過 "git cherry-pick" 命令來執行,以提取現有 提交所引入的變更,並根據目前 分支的尖端將其記錄為新的提交。
- 乾淨
- 提交
-
作為名詞:Git 歷史中的單一點;專案的整個歷史記錄以一組相互關聯的提交表示。「提交」一詞在 Git 中通常用於其他版本控制系統使用「修訂版本」或「版本」的地方。也用作 提交物件的簡稱。
- 提交圖概念、表示和用法
-
由物件資料庫中提交所形成的 DAG 結構的同義詞,由分支尖端使用其連結提交的 鏈進行參考。此結構是權威的提交圖。該圖可以用其他方式表示,例如 「提交圖」檔案。
- 提交圖檔案
-
「提交圖」(通常用連字號分隔) 檔案是 提交圖的補充表示,它可以加速提交圖的遍歷。「提交圖」檔案儲存在 .git/objects/info 目錄或替代物件資料庫的 info 目錄中。
- 提交物件
- 類提交(也稱為 committish)
-
可以遞迴 取消參考至提交物件的 提交物件或 物件。以下都是類提交:提交物件、指向提交物件的 標籤物件、指向指向提交物件之標籤物件的標籤物件,依此類推。
- 核心 Git
-
Git 的基本資料結構和公用程式。僅公開有限的原始碼管理工具。
- DAG
-
有向無環圖。提交物件形成有向無環圖,因為它們有父節點(有向),並且提交物件圖是無環的(沒有以相同 物件開始和結束的 鏈)。
- 懸掛物件
- 取消參考
-
參考 符號參考:存取符號參考所指向的 參考的動作。遞迴取消參考涉及對產生的參考重複上述過程,直到找到非符號參考。
參考 標籤物件:存取標籤指向的 物件的動作。標籤透過對結果物件重複操作來遞迴取消參考,直到結果具有指定的 物件類型(如適用)或任何非「標籤」物件類型。在標籤的上下文中,「遞迴取消參考」的同義詞是「剝離」。
參考 提交物件:存取提交的樹狀物件的動作。提交無法遞迴取消參考。
除非另有說明,否則在 Git 命令或協定的上下文中使用的「取消參考」是隱式遞迴的。
- 分離的 HEAD
-
通常,HEAD 儲存 分支的名稱,並且對歷史記錄 HEAD 執行的命令會對導致 HEAD 指向的分支尖端的歷史記錄進行操作。但是,Git 也允許您 檢出任意 提交,該提交不一定是任何特定分支的尖端。處於這種狀態的 HEAD 稱為「分離」。
請注意,即使 HEAD 處於分離狀態,操作目前分支歷史記錄的命令(例如:
git commit
在其之上建立新的歷史記錄)仍然有效。它們會更新 HEAD 以指向更新後歷史記錄的頂端,而不會影響任何分支。而更新或查詢關於目前分支資訊的命令(例如:git branch --set-upstream-to
設定目前分支整合的遠端追蹤分支),顯然無法運作,因為在這種狀態下,沒有(真正的)目前分支可供查詢。 - 目錄
-
您使用 "ls" 得到的列表 :-)
- 髒的
- 邪惡合併
- 快速轉送
-
快速轉送是一種特殊的 合併 類型,當您擁有一個 修訂版本,並且「合併」另一個 分支 的變更時,該變更恰好是您擁有的修訂版本的後代。在這種情況下,您不會建立新的 合併 提交,而是直接更新您的分支以指向與您要合併的分支相同的修訂版本。這種情況經常會發生在遠端 儲存庫 的 遠端追蹤分支 上。
- 抓取
-
抓取 分支 表示從遠端 儲存庫 取得分支的 頭部參考,找出本地 物件資料庫 中遺失的物件,並取得它們。另請參閱 git-fetch[1]。
- 檔案系統
-
Linus Torvalds 最初將 Git 設計為使用者空間檔案系統,即用於保存檔案和目錄的基礎架構。這確保了 Git 的效率和速度。
- Git 封存
-
對於 Arch 的使用者來說,是 儲存庫 的同義詞。
- gitfile
-
工作樹根目錄下的普通檔案
.git
,指向真正儲存庫的目錄。如需正確使用,請參閱 git-worktree[1] 或 git-submodule[1]。如需語法,請參閱 gitrepository-layout[5]。 - 嫁接
-
嫁接允許透過記錄提交的虛假祖先資訊,將兩個原本不同的開發線連接在一起。這樣,您可以讓 Git 假裝 提交 所擁有的 父節點 集合與建立提交時記錄的不同。透過
.git/info/grafts
檔案設定。請注意,嫁接機制已過時,可能會導致儲存庫之間傳輸物件時出現問題;如需更靈活、更穩健的系統來執行相同操作,請參閱 git-replace[1]。
- 雜湊
-
在 Git 的上下文中,是 物件名稱 的同義詞。
- 頭部
-
指向 分支 頂端 提交 的 具名參考。頭部儲存在
$GIT_DIR/refs/heads/
目錄中的檔案中,使用壓縮參考時除外。(請參閱 git-pack-refs[1]。) - HEAD
-
目前的 分支。更詳細地說:您的 工作樹 通常是從 HEAD 所參考的樹狀結構狀態衍生而來。HEAD 是指您儲存庫中的其中一個 頭部 的參考,但使用 分離的 HEAD 時除外,在這種情況下,它會直接參考任意提交。
- 頭部參考
-
頭部 的同義詞。
- 掛勾
-
在執行數個 Git 命令的過程中,會呼叫選擇性指令碼,讓開發人員新增功能或檢查。通常,掛勾允許預先驗證命令並可能中止命令,並允許在操作完成後發送後續通知。掛勾指令碼位於
$GIT_DIR/hooks/
目錄中,只需移除檔案名稱中的.sample
後綴即可啟用。在較早版本的 Git 中,您必須使其可執行。 - 索引
-
包含狀態資訊的檔案集合,其內容以物件的形式儲存。索引是您 工作樹 的儲存版本。事實上,它還可以包含工作樹的第二個,甚至第三個版本,它們在 合併 時使用。
- 索引項目
-
儲存在 索引 中關於特定檔案的資訊。如果 合併 已開始但尚未完成(即,如果索引包含該檔案的多個版本),則索引項目可能未合併。
- master
-
預設的開發 分支。無論何時建立 Git 儲存庫,都會建立一個名為「master」的分支,並成為作用中的分支。在大多數情況下,這包含本地開發,儘管這純粹是約定俗成的,並非強制要求。
- 合併
-
作為動詞:將另一個 分支(可能來自外部 儲存庫)的內容帶入目前分支。當合併的分支來自不同的儲存庫時,會先 抓取 遠端分支,然後將結果合併到目前分支中。這種抓取和合併操作的組合稱為 提取。合併由自動流程執行,該流程會識別分支分歧以來所做的變更,然後將所有這些變更一起套用。在變更衝突的情況下,可能需要手動介入才能完成合併。
- 物件
-
Git 中的儲存單位。它以其內容的 SHA-1 唯一識別。因此,物件無法變更。
- 物件資料庫
- 物件識別碼 (oid)
-
物件名稱 的同義詞。
- 物件名稱
- 物件類型
- 章魚式合併
- 孤立
-
進入尚未存在的分支(即 未誕生的 分支)的動作。在此類操作之後,第一次建立的提交將成為沒有父節點的提交,開始新的歷史記錄。
- origin
-
預設的上游 儲存庫。大多數專案至少有一個他們追蹤的上游專案。預設情況下,origin 用於該目的。新的上游更新將會抓取到名為 origin/上游分支名稱的 遠端追蹤分支 中,您可以使用
git branch -r
查看這些分支。 - 覆蓋
-
僅更新檔案並將檔案新增至工作目錄,但不刪除它們,類似於 cp -R 更新目的地目錄中的內容的方式。這是從 索引 或 樹狀結構式 中檢出檔案時,檢出 的預設模式。相反地,非覆蓋模式也會刪除來源中不存在的追蹤檔案,類似於 rsync --delete。
- 壓縮包
-
已壓縮成一個檔案的物件集合(為了節省空間或有效率地傳輸它們)。
- 壓縮包索引
-
壓縮包中物件的識別碼和其他資訊的列表,以協助有效率地存取壓縮包的內容。
- 路徑規範
-
用於限制 Git 命令中路徑的模式。
路徑規範用於「git ls-files」、「git ls-tree」、「git add」、「git grep」、「git diff」、「git checkout」和許多其他命令的命令列上,以將操作範圍限制為樹狀結構或工作樹的某些子集。請參閱每個命令的文件,以了解路徑是相對於目前目錄還是最上層目錄。路徑規範語法如下:
-
任何路徑都與其自身匹配
-
直到最後一個斜線的路徑規範代表目錄前綴。該路徑規範的範圍限制於該子樹。
-
路徑規範的其餘部分是路徑名稱其餘部分的模式。相對於目錄前綴的路徑將使用 fnmatch(3) 與該模式進行比對;特別是,* 和 ? 可以 比對目錄分隔符號。
例如,Documentation/*.jpg 會比對 Documentation 子樹中的所有 .jpg 檔案,包括 Documentation/chapter_1/figure_1.jpg。
以冒號
:
開頭的路徑規格 (pathspec) 具有特殊含義。在簡短形式中,前導冒號:
後面接著零個或多個「魔術簽名」字母(可選擇以另一個冒號:
終止),而其餘部分則是與路徑匹配的模式。「魔術簽名」由非字母數字、glob、正規表達式特殊字元或冒號的 ASCII 符號組成。如果模式以不屬於「魔術簽名」符號集且不是冒號的字元開頭,則可以省略終止「魔術簽名」的可選冒號。在長形式中,前導冒號
:
後面接著一個左括號(
、一個以逗號分隔的零個或多個「魔術字」列表和一個右括號)
,而其餘部分則是與路徑匹配的模式。僅包含冒號的路徑規格表示「沒有路徑規格」。此形式不應與其他路徑規格組合使用。
- 頂部
-
魔術字
top
(魔術簽名:/
) 使模式從工作樹的根目錄開始匹配,即使您是從子目錄內執行命令也是如此。 - 字面
-
模式中的萬用字元 (例如
*
或?
) 會被視為字面字元。 - icase
-
大小寫不敏感匹配。
- glob
-
Git 將模式視為適合 fnmatch(3) 取用的 shell glob,並帶有 FNM_PATHNAME 旗標:模式中的萬用字元不會匹配路徑名稱中的 /。例如,"Documentation/*.html" 會匹配 "Documentation/git.html",但不會匹配 "Documentation/ppc/ppc.html" 或 "tools/perf/Documentation/perf.html"。
在針對完整路徑名稱匹配的模式中,兩個連續的星號 ("
**
") 可能具有特殊含義-
開頭的 "
**
" 後面跟著一個斜線表示在所有目錄中匹配。例如,"**/foo
" 會匹配任何位置的檔案或目錄 "foo
",與模式 "foo
" 相同。"**/foo/bar
" 會匹配任何位置的檔案或目錄 "bar
",該檔案或目錄直接位於目錄 "foo
" 下。 -
結尾的 "
/**
" 會匹配內部的所有內容。例如,"abc/**
" 會匹配目錄 "abc" 內的所有檔案,相對於.gitignore
檔案的位置,具有無限深度。 -
一個斜線後面跟著兩個連續的星號,然後是一個斜線,會匹配零個或多個目錄。例如,"
a/**/b
" 會匹配 "a/b
"、"a/x/b
"、"a/x/y/b
" 等等。 -
其他連續的星號被視為無效。
Glob 魔術與字面魔術不相容。
-
- attr
-
在
attr:
之後,會出現一個以空格分隔的「屬性要求」列表,所有這些要求都必須符合,路徑才被視為匹配;這是除了通常的非魔術路徑規格模式匹配之外的要求。請參閱 gitattributes[5]。路徑的每個屬性要求都採用以下形式之一
-
"
ATTR
" 要求設定屬性ATTR
。 -
"
-ATTR
" 要求取消設定屬性ATTR
。 -
"
ATTR=VALUE
" 要求將屬性ATTR
設定為字串VALUE
。 -
"
!ATTR
" 要求未指定屬性ATTR
。請注意,當針對樹狀物件進行匹配時,屬性仍然從工作樹中取得,而不是從給定的樹狀物件中取得。
-
- 排除
-
在路徑匹配任何非排除路徑規格之後,它將透過所有排除路徑規格 (魔術簽名:
!
或其同義詞^
) 執行。如果匹配,則會忽略路徑。當沒有非排除路徑規格時,排除會套用於結果集,如同在沒有任何路徑規格的情況下調用一樣。
-
- 父
-
提交物件包含開發線上邏輯前身(即其父項)的(可能為空的)列表。
- 剝離
- 鎬
-
術語 鎬 是指 diffcore 常式的一個選項,該選項可協助選取新增或刪除給定文字字串的變更。使用
--pickaxe-all
選項,可用於檢視引入或移除特定文字行的完整 變更集。請參閱 git-diff[1]。 - 水管
-
核心 Git 的可愛名稱。
- 瓷器
-
依賴 核心 Git 的程式和程式套件的可愛名稱,提供對核心 Git 的高階存取權。瓷器呈現比 水管 更多的 SCM 介面。
- 每個工作樹的參考
-
每個 工作樹 而非全域的參考。目前只有 HEAD 和任何以
refs/bisect/
開頭的參考,但稍後可能會包含其他不尋常的參考。 - 虛擬參考
-
語義與一般參考不同的參考。這些參考可以透過一般的 Git 命令讀取,但無法透過 git-update-ref[1] 之類的命令寫入。
Git 已知下列虛擬參考
-
FETCH_HEAD
由 git-fetch[1] 或 git-pull[1] 寫入。它可能會參考多個物件 ID。每個物件 ID 都會使用中繼資料進行註解,以指示其擷取來源及其擷取狀態。 -
MERGE_HEAD
由 git-merge[1] 在解決合併衝突時寫入。它包含所有正在合併的提交 ID。
-
- 拉取
-
拉取 分支 表示 擷取 它並 合併 它。另請參閱 git-pull[1]。
- 推送
-
推送 分支 表示從遠端 儲存庫 取得分支的 head 參考,找出它是否是分支的本機 head 參考的祖先,如果是,則將所有可從本機 head 參考 到達 且遠端儲存庫中缺少的所有物件,放入遠端 物件資料庫,並更新遠端 head 參考。如果遠端 head 不是本機 head 的祖先,則推送會失敗。
- 可到達
-
據說給定 提交 的所有祖先都可從該提交「到達」。更廣泛地說,如果我們可以在一個 鏈 中從另一個到達一個 物件,該鏈會追蹤 標籤 到它們所標記的任何內容、提交 到其父項或樹狀結構,以及 樹狀結構 到它們包含的樹狀結構或 blob,則一個物件可以從另一個物件到達。
- 可到達性點陣圖
-
可到達性點陣圖會儲存封裝檔案或多封裝索引 (MIDX) 中選定的一組提交的可 到達性 的相關資訊,以加快物件搜尋速度。這些點陣圖會儲存在 ".bitmap" 檔案中。儲存庫最多只能使用一個點陣圖檔案。點陣圖檔案可能屬於一個封裝或儲存庫的多封裝索引(如果存在)。
- 變基
- 參考
-
一個指向 物件名稱 或另一個參考的名稱(後者稱為 符號參考)。為了方便起見,當參考用作 Git 命令的引數時,有時可以縮寫;有關詳細資訊,請參閱 gitrevisions[7]。參考儲存在 儲存庫 中。
參考命名空間是階層式的。參考名稱必須以
refs/
開頭,或是位於階層的根目錄中。對於後者,它們的名稱必須遵循以下規則-
該名稱僅包含大寫字元或底線。
-
該名稱以 "
_HEAD
" 結尾,或等於 "HEAD
"。在階層的根目錄中,有一些不符合這些規則的不規則參考。以下清單是詳盡的,未來不應擴充
-
AUTO_MERGE
-
BISECT_EXPECTED_REV
-
NOTES_MERGE_PARTIAL
-
NOTES_MERGE_REF
-
MERGE_AUTOSTASH
不同的子階層用於不同的目的。例如,
refs/heads/
階層用於表示本機分支,而refs/tags/
階層用於表示本機標籤。
-
- 參考日誌
-
參考日誌顯示參考的本機「歷程記錄」。換句話說,它可以告訴您此 儲存庫中的倒數第三個修訂版本是什麼,以及昨天晚上 9:14 此 儲存庫中的目前狀態是什麼。有關詳細資訊,請參閱 git-reflog[1]。
- 參考規格
-
「參考規格」由 擷取 和 推送 用來描述遠端 參考 與本機參考之間的對應。有關詳細資訊,請參閱 git-fetch[1] 或 git-push[1]。
- 遠端儲存庫
- 遠端追蹤分支
-
用於追蹤來自另一個 儲存庫 的變更的 參考。它通常看起來像 refs/remotes/foo/bar(表示它追蹤遠端中名為 foo 的分支 bar),並且符合已設定的擷取 參考規格 的右側。遠端追蹤分支不應包含直接修改或對其進行的本機提交。
- 儲存庫
-
參考 的集合,以及包含所有可從參考 到達 的物件的 物件資料庫,可能還附帶來自一個或多個 瓷器 的中繼資料。儲存庫可以透過 替代機制 與其他儲存庫共用物件資料庫。
- 解決
-
手動修復失敗的自動 合併 所遺留的內容的動作。
- 修訂版本
-
提交(名詞)的同義詞。
- 回溯
- SCM
-
原始碼管理(工具)。
- SHA-1
-
「安全雜湊演算法 1」;一種加密雜湊函數。在 Git 的上下文中,作為物件名稱的同義詞使用。
- 淺層複製 (shallow clone)
-
基本上是淺層儲存庫的同義詞,但該詞組更明確地指出它是透過執行
git clone --depth=...
命令所建立的。 - 淺層儲存庫 (shallow repository)
-
淺層儲存庫具有不完整的歷史記錄,其中某些提交的父提交已被截斷(換句話說,Git 被告知要假裝這些提交沒有父提交,即使它們已記錄在提交物件中)。當您只對專案的近期歷史記錄感興趣時,即使上游記錄的實際歷史記錄更大,這有時也很有用。淺層儲存庫是透過將
--depth
選項提供給git-clone[1] 來建立的,其歷史記錄稍後可以使用git-fetch[1] 來加深。 - 暫存條目 (stash entry)
- 子模組 (submodule)
- 超專案 (superproject)
- 符號參照 (symref)
-
符號參照:它不是包含 SHA-1 ID 本身,而是採用 ref: refs/some/thing 的格式,當被參照時,它會遞迴地解參照到此參照。HEAD 是符號參照的主要範例。符號參照使用 git-symbolic-ref[1] 命令來操作。
- 標籤 (tag)
-
refs/tags/
命名空間下的參照,指向任意類型的物件(通常標籤指向標籤或提交物件)。與head 相反,標籤不會被commit
命令更新。Git 標籤與 Lisp 標籤(在 Git 的上下文中稱為物件類型)無關。標籤最常用於標記提交祖先鏈中的特定點。 - 標籤物件 (tag object)
-
包含指向另一個物件之參照的物件,它可以包含訊息,就像提交物件一樣。它還可以包含(PGP)簽名,在這種情況下,它被稱為「簽署標籤物件」。
- 主題分支 (topic branch)
-
開發人員用來識別概念開發線的一般 Git 分支。由於分支非常容易且成本不高,因此通常希望有多個小分支,每個分支都包含定義明確的概念或小的增量但相關的變更。
- 樹 (tree)
- 樹物件 (tree object)
- 樹狀 (tree-ish)(也稱為 treeish)
-
樹物件或可以遞迴地解參照到樹物件的物件。解參照提交物件會產生與版本最上層目錄相對應的樹物件。以下都是樹狀:提交狀、樹物件、指向樹物件的標籤物件、指向指向樹物件的標籤物件的標籤物件等等。
- 未出生 (unborn)
-
HEAD 可以指向一個尚未存在且尚未有任何提交的分支,而這樣的分支稱為未出生的分支。使用者遇到未出生分支最典型的方式是全新建立一個儲存庫,而不是從其他地方複製。HEAD 將指向尚未出生的 main(或 master,取決於您的配置)分支。此外,某些操作可以使用 孤兒 選項讓您進入未出生的分支。
- 未合併索引 (unmerged index)
- 不可達物件 (unreachable object)
- 上游分支 (upstream branch)
-
合併到相關分支(或將相關分支重新變基到其上)的預設分支。它是透過 branch.<name>.remote 和 branch.<name>.merge 配置的。如果 A 的上游分支是 origin/B,有時我們會說「A 正在追蹤 origin/B」。
- 工作樹 (working tree)
-
實際已簽出檔案的樹狀結構。工作樹通常包含 HEAD 提交樹的內容,以及您所做但尚未提交的任何本機變更。
- 工作區 (worktree)
-
儲存庫可以附加零個(即裸儲存庫)或一個或多個工作區。一個「工作區」由一個「工作樹」和儲存庫元數據組成,其中大多數在單個儲存庫的其他工作區之間共享,其中一些是每個工作區單獨維護的(例如,索引、HEAD 和 MERGE_HEAD 等虛擬參照、每個工作區的參照和每個工作區的設定檔)。
GIT
git[1] 套件的一部分