設定與組態
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
- gitattributes
- 命令列介面規範
- Git 日常使用
- 常見問題 (FAQ)
- 詞彙表
- 掛鉤 (Hooks)
- gitignore
- gitmodules
- 修訂版本 (Revisions)
- 子模組
- 教學
- 工作流程
- 所有指南...
管理
底層命令 (Plumbing Commands)
- 2.54.0 → 2.55.0 無變更
-
2.53.0
2026-02-02
-
2.52.0
2025-11-17
- 2.50.1 → 2.51.2 無變更
-
2.50.0
2025-06-16
- 2.48.1 → 2.49.1 無變更
-
2.48.0
2025-01-10
- 2.47.1 → 2.47.3 無變更
-
2.47.0
2024-10-06
- 2.45.3 → 2.46.4 無變更
- 2.45.2 無變更
-
2.45.1
2024-04-29
- 2.44.3 → 2.45.0 無變更
- 2.44.2 無變更
-
2.44.1
2024-04-19
- 2.43.6 → 2.44.0 無變更
- 2.43.5 無變更
-
2.43.4
2024-04-19
- 2.43.1 → 2.43.3 無變更
-
2.43.0
2023-11-20
- 2.42.4 無變更
- 2.42.3 無變更
-
2.42.2
2024-04-19
- 2.41.3 → 2.42.1 無變更
- 2.41.2 無變更
-
2.41.1
2024-04-19
- 2.40.4 → 2.41.0 無變更
- 2.40.3 無變更
-
2.40.2
2024-04-19
- 2.40.0 → 2.40.1 無變更
- 2.39.5 無變更
-
2.39.4
2024-04-19
- 2.39.3 無變更
-
2.39.2
2023-02-06
- 2.39.1 無變更
-
2.39.0
2022-12-12
- 2.38.1 → 2.38.5 無變更
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 無變更
-
2.35.0
2022-01-24
- 2.30.2 → 2.34.8 無變更
- 2.30.1 無變更
- 2.22.2 → 2.30.0 無變更
-
2.22.1
2019-08-11
-
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.11.4 → 2.18.5 無變更
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
- 2.7.6 → 2.8.6 無變更
-
2.6.7
2017-05-05
- 2.1.4 → 2.5.6 無變更
-
2.0.5
2014-12-17
概要
git fsck [--tags] [--root] [--unreachable] [--cache] [--no-reflogs]
[--[no-]full] [--strict] [--verbose] [--lost-found]
[--[no-]dangling] [--[no-]progress] [--connectivity-only]
[--[no-]name-objects] [--[no-]references] [<object>…]
選項
- <object>
-
要作為不可達追蹤(unreachability trace)起始點的物件。
如果未提供物件,git fsck 預設會使用索引檔、
refs命名空間中的所有 SHA-1 參照,以及所有 reflogs(除非指定了 --no-reflogs)作為起始點。 - --unreachable
-
列出存在但無法從任何參照節點到達的物件。
- --dangling
- --no-dangling
-
列出存在但從未被直接使用的物件(預設值)。
--no-dangling可用於從輸出中省略此資訊。 - --root
-
報告根節點。
- --tags
-
報告標籤(tags)。
- --cache
-
將索引中記錄的任何物件也視為不可達追蹤的根節點。
- --no-reflogs
-
不要將僅由 reflog 中的條目參照的提交視為可達。此選項僅用於搜尋過去存在於某個引用中,但現在不在其中,卻仍存在於該對應 reflog 中的提交。
- --full
-
不僅檢查 GIT_OBJECT_DIRECTORY ($GIT_DIR/objects) 中的物件,也檢查列在 GIT_ALTERNATE_OBJECT_DIRECTORIES 或 $GIT_DIR/objects/info/alternates 中的替代物件池,以及在 $GIT_DIR/objects/pack 中及其替代物件池對應 pack 子目錄中找到的封裝 Git 存檔。現在這是預設行為;您可以使用 --no-full 將其關閉。
- --connectivity-only
-
僅檢查可達物件的連通性,確保任何由可達標籤、提交或樹狀物件所參照的物件都存在。這可以透過完全避免讀取 blob 來加快操作速度(儘管仍會檢查參照的 blob 是否存在)。這將檢測提交和樹狀物件中的損壞,但不會進行任何語義檢查(例如格式錯誤)。Blob 物件中的損壞將完全無法被檢測。
不可達的標籤、提交和樹狀物件也將被存取以找出懸空歷史片段的尖端。如果您不關心此輸出並希望進一步加快速度,請使用
--no-dangling。 - --strict
-
啟用更嚴格的檢查,即捕捉由舊版本 Git 建立的設置了 g+w 位元的檔案模式。現有的儲存庫,包括 Linux 核心、Git 本身和稀疏儲存庫都有會觸發此檢查的舊物件,但建議對新專案使用此旗標進行檢查。
- --verbose
-
輸出詳細訊息。
- --lost-found
-
根據類型將懸空物件寫入 .git/lost-found/commit/ 或 .git/lost-found/other/。如果物件是 blob,則將內容寫入檔案,而不是寫入其物件名稱。
- --name-objects
-
顯示可達物件的名稱時,除了顯示 SHA-1 外,還顯示一個描述其如何可達的名稱,格式與 git-rev-parse[1] 相容,例如
HEAD@{1234567890}~25^2:src/。 - --progress
- --no-progress
-
預設情況下,當連接到終端時,進度狀態會報告在標準錯誤流上,除非指定了 --no-progress 或 --verbose。即使標準錯誤流未導向至終端,--progress 也會強制顯示進度狀態。
- --references
- --no-references
-
控制是否透過 git refs verify 檢查參照資料庫的一致性。詳情請參閱 git-refs[1]。預設行為是檢查參照資料庫。
組態設定 (CONFIGURATION)
本節中此行以下的內容是從 git-config[1] 文件中選擇性包含的。內容與該處找到的內容相同
- fsck.<msg-id>
-
在 fsck 期間,git 可能會發現舊資料的問題,這些問題不會由當前版本的 git 產生,如果設置了
transfer.fsckObjects,也不會透過網路發送。此功能旨在支援處理包含此類資料的舊式儲存庫。設置
fsck.<msg-id> 會被 git-fsck[1] 採用,但若要接受此類資料的推送,請改為設置receive.fsck.<msg-id>,或者若要複製(clone)或抓取(fetch)它,請設置fetch.fsck.<msg-id>。本文件的其餘部分為簡潔起見討論
fsck.*,但同樣適用於對應的receive.fsck.*和fetch.fsck.*變數。與
color.ui和core.editor等變數不同,如果未設置receive.fsck.<msg-id> 和fetch.fsck.<msg-id> 變數,它們不會回退到fsck.<msg-id> 配置。若要在不同情況下統一配置相同的 fsck 設置,必須將這三者都設置為相同的值。當設置了
fsck.<msg-id> 後,可以透過配置fsck.<msg-id> 設置將錯誤轉為警告,反之亦然。其中 <msg-id> 是 fsck 訊息 ID,值為error、warn或ignore之一。為了方便起見,fsck 會在錯誤/警告前加上訊息 ID,例如 "missingEmail: invalid author/committer line - missing email" 意味著設置fsck.missingEmail=ignore將隱藏該問題。總體而言,最好使用
fsck.skipList枚舉現有的有問題物件,而不是列出這些有問題物件所共享的破壞類型以將其忽略,因為後者會讓相同破壞類型的後續實例未被察覺。設置未知的
fsck.<msg-id> 值會導致 fsck 終止,但對receive.fsck.<msg-id> 和fetch.fsck.<msg-id> 做同樣的操作只會導致 git 發出警告。關於 <msg-id> 的支援值,請參閱 git-fsck[1] 的
FsckMessages章節。 - fsck.skipList
-
指向物件名稱列表的路徑(即每行一個未縮寫的 SHA-1),這些物件已知以非致命方式損壞且應被忽略。在 Git 2.20 及更高版本中,註解(#)、空行以及任何開頭和結尾的空白都會被忽略。在舊版本中,除每行一個 SHA-1 外的所有內容都會報錯。
當一個既有的專案儘管包含早期提交中的錯誤(例如無效的提交者電子郵件地址)仍應被接受時,此功能非常有用。注意:損壞的物件無法透過此設置跳過。
像
fsck.<msg-id> 一樣,此變數也有對應的receive.fsck.skipList和fetch.fsck.skipList變體。與
color.ui和core.editor等變數不同,如果未設置receive.fsck.skipList和fetch.fsck.skipList變數,它們不會回退到fsck.skipList配置。若要在不同情況下統一配置相同的 fsck 設置,必須將這三者都設置為相同的值。舊版本的 Git(2.20 之前)記錄說物件名稱列表應該是排序過的。這從來都不是必要條件;物件名稱可以以任何順序出現,但在讀取列表時,我們會追蹤列表是否已排序,以用於內部的二元搜尋實作,這樣可以節省已經排序過的列表的一些處理工作。除非您有一個龐大的列表,否則沒有理由特地去預先排序列表。在 Git 2.20 版本之後,改用了雜湊實作,因此現在沒有理由預先排序列表。
討論
git-fsck 會測試 SHA-1 和一般的物件健全性,並對產生的可達性及其他所有內容進行完整追蹤。它會印出發現的任何損壞(遺失或損壞的物件),如果您使用 --unreachable 旗標,它也會印出存在但無法從任何指定根節點(或上述提到的預設集合)到達的物件。
任何損壞的物件,您都必須在備份或其他存檔中找到(即您可以將其刪除,然後與其他站點進行 rsync,希望別人有您損壞的物件)。
如果 core.commitGraph 為 true,也會使用 git commit-graph verify 檢查 commit-graph 檔案。請參閱 git-commit-graph[1]。
擷取的診斷訊息
- unreachable <type> <object>
-
<type> 物件 <object> 在看到的任何樹狀物件或提交中,實際上並沒有被直接或間接地參照到。這可能意味著存在另一個您未指定的根節點,或者該樹狀物件已損壞。如果您沒有漏掉根節點,那麼刪除不可達節點也是可以的,因為它們無法被使用。
- missing <type> <object>
-
<type> 物件 <object> 已被參照但未存在於資料庫中。
- dangling <type> <object>
-
<type> 物件 <object> 存在於資料庫中但從未被直接使用。一個懸空的提交可能是個根節點。
- hash mismatch <object>
-
資料庫中的物件雜湊值與物件資料庫中的值不符。這顯示嚴重的資料完整性問題。
FSCK 訊息
以下列出了 git fsck 偵測到的錯誤類型及其含義,以及它們的預設嚴重性。除了標記為 "(FATAL)" 的錯誤外,錯誤的嚴重性可以透過設置對應的 fsck.<msg-id> 配置變數來調整。
badDate-
(ERROR) 作者/提交者行中的日期格式無效。
badDateOverflow-
(ERROR) 作者/提交者行中的日期值無效。
badEmail-
(ERROR) 作者/提交者行中的電子郵件格式無效。
badFilemode-
(INFO) 樹狀物件包含錯誤的檔案模式(filemode)條目。
badGpgsig-
(ERROR) 標籤包含錯誤(被截斷)的簽章(例如
gpgsig)標頭。 badHeadTarget-
(ERROR)
HEAD參照是一個不指向分支的符號參照(symref)。 badHeaderContinuation-
(ERROR) 延續標頭(例如
gpgsig的)意外被截斷。 badName-
(ERROR) 作者/提交者名稱為空。
badObjectSha1-
(ERROR) 物件的 sha1 錯誤。
badPackedRefEntry-
(ERROR) "packed-refs" 檔案包含無效條目。
badPackedRefHeader-
(ERROR) "packed-refs" 檔案包含無效標頭。
badParentSha1-
(ERROR) 提交物件的父代 sha1 錯誤。
badRefContent-
(ERROR) 參照(ref)內容錯誤。
badRefFiletype-
(ERROR) 參照的檔案類型錯誤。
badRefName-
(ERROR) 參照格式無效。
badRefOid-
(ERROR) 參照指向無效的物件 ID。
badReferentName-
(ERROR) 符號參照指向的名稱無效。
badReftableTableName-
(WARN) Reftable 表格名稱無效。
badTagName-
(INFO) 標籤格式無效。
badTimezone-
(ERROR) 在作者/提交者行中發現無效的時區。
badTree-
(ERROR) 樹狀物件無法被解析。
badTreeSha1-
(ERROR) 樹狀物件格式無效。
badType-
(ERROR) 發現無效的物件類型。
duplicateEntries-
(ERROR) 樹狀物件包含重複的檔案條目。
emptyName-
(WARN) 路徑包含空名稱。
emptyPackedRefsFile-
(INFO) "packed-refs" 檔案為空。如果您看到此錯誤,請回報給 git@vger.kernel.org 郵件列表。由於只有極早期的 Git 版本會建立此類空的 "packed_refs" 檔案,我們將來可能會收緊此規則。
extraHeaderEntry-
(IGNORE) 在
tagger之後發現額外標頭。 fullPathname-
(WARN) 路徑包含以 "/" 開頭的完整路徑。
gitattributesBlob-
(ERROR) 在
.gitattributes發現非 blob 物件。 gitattributesLarge-
(ERROR)
.gitattributesblob 太大。 gitattributesLineLength-
(ERROR)
.gitattributesblob 包含過長的行。 gitattributesMissing-
(ERROR) 無法讀取
.gitattributesblob。 gitattributesSymlink-
(INFO)
.gitattributes是一個符號連結。 gitignoreSymlink-
(INFO)
.gitignore是一個符號連結。 gitmodulesBlob-
(ERROR) 在
.gitmodules發現非 blob 物件。 gitmodulesLarge-
(ERROR)
.gitmodules檔案太大而無法解析。 gitmodulesMissing-
(ERROR) 無法讀取
.gitmodulesblob。 gitmodulesName-
(ERROR) 子模組名稱無效。
gitmodulesParse-
(INFO) 無法解析
.gitmodulesblob。 gitmodulesPath-
(ERROR)
.gitmodules路徑無效。 gitmodulesSymlink-
(ERROR)
.gitmodules是一個符號連結。 gitmodulesUpdate-
(ERROR) 發現無效的子模組更新設置。
gitmodulesUrl-
(ERROR) 發現無效的子模組網址。
hasDot-
(WARN) 樹狀物件包含名為
.的條目。 hasDotdot-
(WARN) 樹狀物件包含名為
..的條目。 hasDotgit-
(WARN) 樹狀物件包含名為
.git的條目。 largePathname-
(WARN) 樹狀物件包含一個路徑名稱非常長的條目。如果
fsck.largePathname的值包含冒號,該值將用作最大允許長度(例如,"warn:10" 會針對任何 11 個位元組或以上的路徑元件發出警告)。預設值為 4096。 mailmapSymlink-
(INFO)
.mailmap是一個符號連結。 missingAuthor-
(ERROR) 缺少作者。
missingCommitter-
(ERROR) 缺少提交者。
missingEmail-
(ERROR) 作者/提交者行中缺少電子郵件。
missingNameBeforeEmail-
(ERROR) 作者/提交者行中電子郵件前缺少名稱。
missingObject-
(ERROR) 標籤物件中缺少
object行。 missingSpaceBeforeDate-
(ERROR) 作者/提交者行中日期前缺少空格。
missingSpaceBeforeEmail-
(ERROR) 作者/提交者行中電子郵件前缺少空格。
missingTag-
(ERROR) 標籤物件中的
type行後意外結束。 missingTagEntry-
(ERROR) 標籤物件中缺少
tag行。 missingTaggerEntry-
(INFO) 標籤物件中缺少
tagger行。 missingTree-
(ERROR) 提交物件中缺少
tree行。 missingType-
(ERROR) 標籤物件中
type行的類型值無效。 missingTypeEntry-
(ERROR) 標籤物件中缺少
type行。 multipleAuthors-
(ERROR) 在提交中發現多個作者行。
nulInCommit-
(WARN) 在提交物件主體中發現 NUL 位元組。
nulInHeader-
(FATAL) 物件標頭中存在 NUL 位元組。
nullSha1-
(WARN) 樹狀物件包含指向 null sha1 的條目。
packedRefEntryNotTerminated-
(ERROR) "packed-refs" 檔案包含一個未以換行符號結尾的條目。
packedRefUnsorted-
(ERROR) "packed-refs" 檔案未排序。
refMissingNewline-
(INFO) 一個未以換行符號(LF)結尾的鬆散參照(loose ref)。由於合法的 Git 實作從未建立過此類鬆散參照檔案,未來可能會變成錯誤。如果您看到此錯誤,請回報給 git@vger.kernel.org 郵件列表,因為我們需要知道是什麼工具建立了這樣的檔案。
symlinkRef-
(INFO) 符號連結被用作符號參照。如果您看到此錯誤,請回報給 git@vger.kernel.org 郵件列表,因為我們正在評估放棄支援建立作為符號參照的符號連結的可行性。
symrefTargetIsNotARef-
(INFO) 符號參照的目標既不指向根參照,也不指向以 "refs/" 開頭的參照。雖然我們允許使用
gitsymbolic-ref建立指向 "ref" 之外目標的符號參照,但未來可能會收緊規則。如果您看到此錯誤,請回報給 git@vger.kernel.org 郵件列表,因為我們需要知道是什麼工具建立了這樣的檔案。 trailingRefContent-
(INFO) 一個鬆散參照具有尾隨內容。由於合法的 Git 實作從未建立過此類鬆散參照檔案,未來可能會變成錯誤。如果您看到此錯誤,請回報給 git@vger.kernel.org 郵件列表,因為我們需要知道是什麼工具建立了這樣的檔案。
treeNotSorted-
(ERROR) 樹狀物件未正確排序。
unknownType-
(ERROR) 發現未知的物件類型。
unterminatedHeader-
(FATAL) 物件標頭中缺少換行符號。
zeroPaddedDate-
(ERROR) 在作者/提交者行中發現零填充的日期。
zeroPaddedFilemode-
(WARN) 在樹狀物件中發現零填充的檔案模式。
GIT
git[1] 套件的一部分