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