設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
-
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>
-
一個用於作為不可達跟蹤的起點的物件。
如果沒有給出物件,git fsck 預設使用索引檔案、
refs名稱空間下的所有 SHA-1 引用以及所有 reflog(除非給出了 --no-reflogs)作為起點。 - --unreachable
-
列印存在但無法從任何引用節點到達的物件。
- --dangling
- --no-dangling
-
列印存在但從未被 *直接* 使用過的物件(預設)。
--no-dangling可用於從輸出中省略此資訊。 - --root
-
報告根節點。
- --tags
-
報告標籤。
- --cache
-
將索引中記錄的任何物件也視為不可達跟蹤的起點。
- --no-reflogs
-
不要將僅由 reflog 條目引用的提交視為可達。此選項僅用於查詢曾經在 ref 中但現在不再存在,但仍存在於相應 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
-
啟用更嚴格的檢查,即捕獲用 g+w 位集記錄的檔案模式,該檔案模式是由舊版本 Git 建立的。現有儲存庫,包括 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]。預設行為是檢查引用資料庫。
配置
本節中以下所有內容均從 git-config[1] 文件中選擇性地包含。內容與彼處相同:
- fsck.<msg-id>
-
在 fsck 期間,git 可能會發現舊資料存在問題,這些問題不會被當前版本的 git 生成,並且在設定
transfer.fsckObjects時不會透過網路傳輸。此功能旨在支援處理包含此類資料的舊儲存庫。設定
fsck.<msg-id> 將被 git-fsck[1] 讀取,但要接受此類資料的推送,請改而設定receive.fsck.<msg-id>,或者要克隆或獲取它,請設定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 MESSAGES
以下列出了 git fsck 檢測到的錯誤型別及其含義和預設嚴重性。除標記為“(FATAL)”的錯誤外,錯誤的嚴重性都可以透過設定相應的 fsck.<msg-id> 配置變數來調整。
badDate-
(ERROR) 作者/提交者行中的日期格式無效。
badDateOverflow-
(ERROR) 作者/提交者行中的日期值無效。
badEmail-
(ERROR) 作者/提交者行中的電子郵件格式無效。
badFilemode-
(INFO) 樹中包含無效的檔案模式條目。
badGpgsig-
(ERROR) 標籤包含無效(截斷)的簽名(例如,
gpgsig)頭。 badHeaderContinuation-
(ERROR) 繼續頭(例如,用於
gpgsig)意外被截斷。 badName-
(ERROR) 作者/提交者姓名為空。
badObjectSha1-
(ERROR) 物件具有無效的 sha1。
badPackedRefEntry-
(ERROR) "packed-refs" 檔案包含無效條目。
badPackedRefHeader-
(ERROR) "packed-refs" 檔案包含無效頭。
badParentSha1-
(ERROR) 提交物件具有無效的父 sha1。
badRefContent-
(ERROR) ref 具有無效內容。
badRefFiletype-
(ERROR) ref 具有無效的檔案型別。
badRefName-
(ERROR) ref 格式無效。
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) 發現無效的子模組 URL。
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) 一個鬆散的 ref 不以換行符 (LF) 結尾。由於有效的 Git 實現從不建立如此鬆散的 ref 檔案,因此將來它可能會成為一個錯誤。如果您看到此錯誤,請報告給 git@vger.kernel.org 郵件列表,因為我們需要知道哪些工具建立了這樣的檔案。
symlinkRef-
(INFO) 符號連結用作符號引用。如果您看到此錯誤,請報告給 git@vger.kernel.org 郵件列表,因為我們正在評估放棄建立符號連結作為符號引用的可行性。
symrefTargetIsNotARef-
(INFO) 符號引用的目標既不是根引用,也不是以“refs/”開頭的引用。儘管我們允許使用
gitsymbolic-ref建立指向 ref 外部的引用的符號引用,但我們將來可能會收緊此規則。如果您看到此錯誤,請報告給 git@vger.kernel.org 郵件列表,因為我們需要知道哪些工具建立了這樣的檔案。 trailingRefContent-
(INFO) 鬆散的 ref 包含尾隨內容。由於有效的 Git 實現從不建立如此鬆散的 ref 檔案,因此將來它可能會成為一個錯誤。如果您看到此錯誤,請報告給 git@vger.kernel.org 郵件列表,因為我們需要知道哪些工具建立了這樣的檔案。
treeNotSorted-
(ERROR) 樹未正確排序。
unknownType-
(ERROR) 發現未知物件型別。
unterminatedHeader-
(FATAL) 物件頭中缺少行尾。
zeroPaddedDate-
(ERROR) 在作者/提交者行中發現零填充日期。
zeroPaddedFilemode-
(WARN) 在樹中發現零填充的檔案模式。