設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 無更改
-
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>…]
選項
- <物件>
-
一個被視為不可達追溯起點的物件。
如果沒有指定物件,*git fsck* 預設將索引檔案、
refs
名稱空間中所有 SHA-1 引用以及所有引用日誌(除非給定 --no-reflogs 選項)作為起點。 - --unreachable
-
打印出存在但無法從任何引用節點訪問到的物件。
- --[no-]dangling
-
打印出存在但從未被*直接*使用的物件(預設)。
--no-dangling
可用於從輸出中省略此資訊。 - --root
-
報告根節點。
- --tags
-
報告標籤。
- --cache
-
將索引中記錄的任何物件也視為不可達追溯的起點。
- --no-reflogs
-
不要將僅由引用日誌條目引用的提交視為可達。此選項僅用於查詢曾經在引用中但現在不在,但仍在其相應引用日誌中的提交。
- --full
-
不僅檢查 GIT_OBJECT_DIRECTORY ($GIT_DIR/objects) 中的物件,還檢查 GIT_ALTERNATE_OBJECT_DIRECTORIES 或 $GIT_DIR/objects/info/alternates 中列出的備用物件池中以及 $GIT_DIR/objects/pack 中和備用物件池中相應打包子目錄中找到的打包 Git 歸檔檔案中的物件。這現在是預設設定;您可以使用 --no-full 關閉它。
- --connectivity-only
-
僅檢查可達物件的連線性,確保可達標籤、提交或樹引用的任何物件都存在。這透過完全避免讀取二進位制物件(儘管它仍然檢查引用的二進位制物件是否存在)來加速操作。這將檢測提交和樹中的損壞,但不執行任何語義檢查(例如,格式錯誤)。二進位制物件中的損壞將完全無法檢測到。
不可達的標籤、提交和樹也將被訪問,以查詢歷史中懸空片段的尖端。如果您不關心此輸出並希望進一步加速,請使用
--no-dangling
。 - --strict
-
啟用更嚴格的檢查,即捕獲由舊版本 Git 建立的、檔案模式中設定了 g+w 位的記錄。現有倉庫,包括 Linux 核心、Git 本身和稀疏倉庫,都包含會觸發此檢查的舊物件,但建議使用此標誌檢查新專案。
- --verbose
-
顯示詳細資訊。
- --lost-found
-
將懸空物件寫入 .git/lost-found/commit/ 或 .git/lost-found/other/,具體取決於型別。如果物件是二進位制物件,其內容將寫入檔案,而不是其物件名稱。
- --name-objects
-
在顯示可達物件的名稱時,除了 SHA-1 外,還顯示一個描述它們**如何**可達的名稱,與 git-rev-parse[1] 相容,例如
HEAD@{1234567890}~25^2:src/
。 - --[no-]progress
-
當標準錯誤流連線到終端時,預設會在標準錯誤流上報告進度狀態,除非指定了 --no-progress 或 --verbose。即使標準錯誤流未重定向到終端,--progress 也會強制報告進度狀態。
- --[no-]references
-
控制是否透過 *git refs verify* 檢查引用資料庫的一致性。詳情請參閱 git-refs[1]。預設是檢查引用資料庫。
配置
本節中以下所有內容均從 git-config[1] 文件中選擇性地包含。內容與彼處相同:
- fsck.<訊息ID>
-
在 fsck 過程中,git 可能會發現舊資料的問題,這些資料不會由當前版本的 git 生成,並且如果設定了
transfer.fsckObjects
也不會透過網路傳送。此功能旨在支援處理包含此類資料的舊倉庫。設定
fsck.
<訊息ID> 將被 git-fsck[1] 識別,但要接受此類資料的推送,請改為設定receive.fsck.
<訊息ID>,或者要克隆或抓取它,請設定fetch.fsck.
<訊息ID>。文件的其餘部分為簡潔起見討論
fsck.*
,但同樣適用於相應的receive.fsck.*
和fetch.fsck.*
變數。與
color.ui
和core.editor
等變數不同,如果未設定receive.fsck.
<訊息ID> 和fetch.fsck.
<訊息ID> 變數,它們將不會回退到fsck.
<訊息ID> 配置。要在不同情況下統一配置相同的 fsck 設定,所有這三個變數都必須設定為相同的值。當設定
fsck.
<訊息ID> 時,可以透過配置fsck.
<訊息ID> 設定來將錯誤切換為警告,反之亦然,其中 <訊息ID> 是 fsck 訊息 ID,值為error
、warn
或ignore
之一。為了方便起見,fsck 會在錯誤/警告前加上訊息 ID,例如“missingEmail: invalid author/committer line - missing email”表示設定fsck.missingEmail
=
ignore
將隱藏該問題。通常,最好使用
fsck.skipList
列舉存在問題的現有物件,而不是列出這些問題物件共有的要忽略的損壞型別,因為後者將允許新的相同損壞例項被忽視。設定一個未知的
fsck.
<訊息ID> 值將導致 fsck 終止,但對receive.fsck.
<訊息ID> 和fetch.fsck.
<訊息ID> 執行相同的操作只會導致 git 發出警告。有關 <訊息ID> 支援的值,請參閱 git-fsck[1] 的
Fsck
訊息
部分。 - fsck.skipList
-
一個包含物件名稱列表(即每行一個未縮寫的 SHA-1)的路徑,這些物件已知以非致命方式損壞且應被忽略。在 Git 2.20 及更高版本中,註釋(*#*)、空行以及任何前導和尾隨空格都將被忽略。在舊版本中,除每行一個 SHA-1 外的所有內容都將報錯。
此功能在已建立的專案中很有用,即使早期提交包含可以安全忽略的錯誤(例如無效的提交者電子郵件地址),也應接受它們。注意:損壞的物件不能透過此設定跳過。
與
fsck.
<訊息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* 檢查提交圖檔案。請參閱 git-commit-graph[1]。
FSCK 訊息
以下列出了 git
fsck
檢測到的錯誤型別及其含義,以及它們的預設嚴重程度。除了標記為“(FATAL)”的錯誤外,其他錯誤的嚴重程度可以透過設定相應的 fsck.
<訊息ID> 配置變數進行調整。
badDate
-
(錯誤)作者/提交者行中的日期格式無效。
badDateOverflow
-
(錯誤)作者/提交者行中的日期值無效。
badEmail
-
(錯誤)作者/提交者行中的電子郵件格式無效。
badFilemode
-
(資訊)樹包含一個錯誤的檔案模式條目。
badName
-
(錯誤)作者/提交者名稱為空。
badObjectSha1
-
(錯誤)物件的 SHA-1 值不正確。
badPackedRefEntry
-
(錯誤)“packed-refs”檔案包含無效條目。
badPackedRefHeader
-
(錯誤)“packed-refs”檔案包含無效頭。
badParentSha1
-
(錯誤)提交物件的父級 SHA-1 值不正確。
badRefContent
-
(錯誤)引用內容不正確。
badRefFiletype
-
(錯誤)引用的檔案型別不正確。
badRefName
-
(錯誤)引用格式無效。
badReferentName
-
(錯誤)符號引用的被引用名稱無效。
badTagName
-
(資訊)標籤格式無效。
badTimezone
-
(錯誤)作者/提交者行中存在無效時區。
badTree
-
(錯誤)無法解析樹。
badTreeSha1
-
(錯誤)樹的格式無效。
badType
-
(錯誤)發現無效物件型別。
duplicateEntries
-
(錯誤)樹包含重複的檔案條目。
emptyName
-
(警告)路徑包含空名稱。
emptyPackedRefsFile
-
(資訊)“packed-refs”檔案為空。如果您看到此錯誤,請報告到 git@vger.kernel.org 郵件列表。由於只有非常早期的 Git 版本才會建立這樣的空“packed_refs”檔案,我們將來可能會收緊此規則。
extraHeaderEntry
-
(忽略)在
tagger
之後發現額外頭部。 fullPathname
-
(警告)路徑包含以“/”開頭的完整路徑。
gitattributesBlob
-
(錯誤)在
.gitattributes
處發現非二進位制物件。 gitattributesLarge
-
(錯誤)
.gitattributes
二進位制物件過大。 gitattributesLineLength
-
(錯誤)
.gitattributes
二進位制物件包含過長的行。 gitattributesMissing
-
(錯誤)無法讀取
.gitattributes
二進位制物件。 gitattributesSymlink
-
(資訊)
.gitattributes
是一個符號連結。 gitignoreSymlink
-
(資訊)
.gitignore
是一個符號連結。 gitmodulesBlob
-
(錯誤)在
.gitmodules
處發現非二進位制物件。 gitmodulesLarge
-
(錯誤)
.gitmodules
檔案過大無法解析。 gitmodulesMissing
-
(錯誤)無法讀取
.gitmodules
二進位制物件。 gitmodulesName
-
(錯誤)子模組名稱無效。
gitmodulesParse
-
(資訊)無法解析
.gitmodules
二進位制物件。
gitmodulesLarge
;(錯誤).gitmodules
二進位制物件過大無法解析。
gitmodulesPath
-
(錯誤)
.gitmodules
路徑無效。 gitmodulesSymlink
-
(錯誤)
.gitmodules
是一個符號連結。 gitmodulesUpdate
-
(錯誤)發現無效的子模組更新設定。
gitmodulesUrl
-
(錯誤)發現無效的子模組 URL。
hasDot
-
(警告)樹包含名為
.
的條目。 hasDotdot
-
(警告)樹包含名為
..
的條目。 hasDotgit
-
(警告)樹包含名為
.git
的條目。 largePathname
-
(警告)樹包含路徑名過長的條目。如果
fsck.largePathname
的值包含冒號,則該值將用作最大允許長度(例如,“warn:10”將對任何 11 位元組或更長的路徑元件發出警告)。預設值為 4096。 mailmapSymlink
-
(資訊)
.mailmap
是一個符號連結。 missingAuthor
-
(錯誤)作者缺失。
missingCommitter
-
(錯誤)提交者缺失。
missingEmail
-
(錯誤)作者/提交者行中缺少電子郵件。
missingNameBeforeEmail
-
(錯誤)作者/提交者行中電子郵件前缺少名稱。
missingObject
-
(錯誤)標籤物件中缺少
object
行。 missingSpaceBeforeDate
-
(錯誤)作者/提交者行中日期前缺少空格。
missingSpaceBeforeEmail
-
(錯誤)作者/提交者行中電子郵件前缺少空格。
missingTag
-
(錯誤)標籤物件中
type
行之後出現意外結束。 missingTagEntry
-
(錯誤)標籤物件中缺少
tag
行。 missingTaggerEntry
-
(資訊)標籤物件中缺少
tagger
行。 missingTree
-
(錯誤)提交物件中缺少
tree
行。 missingType
-
(錯誤)標籤物件中
type
行上的型別值無效。 missingTypeEntry
-
(錯誤)標籤物件中缺少
type
行。 multipleAuthors
-
(錯誤)提交中發現多行作者資訊。
nulInCommit
-
(警告)提交物件主體中發現空位元組。
nulInHeader
-
(致命)物件頭部存在空位元組。
nullSha1
-
(警告)樹包含指向空 SHA-1 的條目。
packedRefEntryNotTerminated
-
(錯誤)“packed-refs”檔案包含一個未以換行符終止的條目。
packedRefUnsorted
-
(錯誤)“packed-refs”檔案未排序。
refMissingNewline
-
(資訊)一個未以換行符(LF)結尾的鬆散引用。由於 Git 的有效實現從未建立過此類鬆散引用檔案,未來這可能會成為一個錯誤。如果您看到此錯誤,請報告到 git@vger.kernel.org 郵件列表,因為我們需要知道是哪個工具建立了此類檔案。
symlinkRef
-
(資訊)符號連結被用作符號引用。如果您看到此錯誤,請報告到 git@vger.kernel.org 郵件列表,因為我們正在評估取消支援將符號連結建立為符號引用的可行性。
symrefTargetIsNotARef
-
(資訊)符號引用的目標既不指向根引用,也不指向以“refs/”開頭的引用。儘管我們允許使用
git
symbolic-ref
建立指向“ref”之外的被引用物件的符號引用,但我們將來可能會收緊此規則。如果您看到此錯誤,請報告到 git@vger.kernel.org 郵件列表,因為我們需要知道是哪個工具建立了此類檔案。 trailingRefContent
-
(資訊)鬆散引用有尾隨內容。由於 Git 的有效實現從未建立過此類鬆散引用檔案,未來這可能會成為一個錯誤。如果您看到此錯誤,請報告到 git@vger.kernel.org 郵件列表,因為我們需要知道是哪個工具建立了此類檔案。
treeNotSorted
-
(錯誤)樹未正確排序。
unknownType
-
(錯誤)發現未知物件型別。
unterminatedHeader
-
(致命)物件頭部缺少行尾符。
zeroPaddedDate
-
(錯誤)作者/提交者行中發現零填充日期。
zeroPaddedFilemode
-
(警告)在樹中發現零填充檔案模式。