设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
-
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>…]
选项
- <对象>
-
一个要作为不可达性追踪头部的对象。
如果没有给出对象,git fsck 默认使用索引文件,
refs命名空间中所有 SHA-1 引用,以及所有引用日志(除非给出 --no-reflogs)作为头部。 - --unreachable
-
打印出存在的但从任何引用节点都不可达的对象。
- --dangling
- --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 和备用对象池中相应 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 为真,则还会使用 git commit-graph verify 检查提交图文件。请参阅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-
(错误) 作者/提交者行中的日期格式无效。
badDateOverflow-
(错误) 作者/提交者行中的日期值无效。
badEmail-
(错误) 作者/提交者行中的电子邮件格式无效。
badFilemode-
(信息) 树中包含一个错误的文件模式条目。
badGpgsig-
(错误) 标签包含一个损坏(截断)的签名(例如,
gpgsig)头部。 badHeadTarget-
(错误)
HEAD引用是一个符号引用,它不指向一个分支。 badHeaderContinuation-
(错误) 延续头部(例如
gpgsig)意外截断。 badName-
(错误) 作者/提交者名称为空。
badObjectSha1-
(错误) 对象具有错误的 sha1。
badPackedRefEntry-
(错误) "packed-refs" 文件包含无效条目。
badPackedRefHeader-
(错误) "packed-refs" 文件包含无效头部。
badParentSha1-
(错误) 提交对象具有错误的父级 sha1。
badRefContent-
(错误) 引用内容错误。
badRefFiletype-
(错误) 引用文件类型错误。
badRefName-
(错误) 引用格式无效。
badRefOid-
(错误) 引用指向无效的对象 ID。
badReferentName-
(错误) 符号引用的参照名称无效。
badReftableTableName-
(警告) reftable 表名无效。
badTagName-
(信息) 标签格式无效。
badTimezone-
(错误) 在作者/提交者行中发现无效时区。
badTree-
(错误) 树无法解析。
badTreeSha1-
(错误) 树格式无效。
badType-
(错误) 发现无效对象类型。
duplicateEntries-
(错误) 树中包含重复的文件条目。
emptyName-
(警告) 路径包含空名称。
emptyPackedRefsFile-
(信息) "packed-refs" 文件为空。如果您看到此错误,请报告给 git@vger.kernel.org 邮件列表。由于只有非常早期的 Git 版本会创建这种空的 "packed_refs" 文件,我们将来可能会收紧此规则。
extraHeaderEntry-
(忽略) 在
tagger之后发现额外的头部。 fullPathname-
(警告) 路径包含以"/"开头的完整路径。
gitattributesBlob-
(错误) 在
.gitattributes处发现非 blob。 gitattributesLarge-
(错误)
.gitattributesblob 过大。 gitattributesLineLength-
(错误)
.gitattributesblob 包含过长的行。 gitattributesMissing-
(错误) 无法读取
.gitattributesblob。 gitattributesSymlink-
(信息)
.gitattributes是一个符号链接。 gitignoreSymlink-
(信息)
.gitignore是一个符号链接。 gitmodulesBlob-
(错误) 在
.gitmodules处发现非 blob。 gitmodulesLarge-
(错误)
.gitmodules文件过大无法解析。 gitmodulesMissing-
(错误) 无法读取
.gitmodulesblob。 gitmodulesName-
(错误) 子模块名称无效。
gitmodulesParse-
(信息) 无法解析
.gitmodulesblob。 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-
(警告) 在提交对象正文中发现 NUL 字节。
nulInHeader-
(致命) 对象头中存在 NUL 字节。
nullSha1-
(警告) 树中包含指向 null sha1 的条目。
packedRefEntryNotTerminated-
(错误) "packed-refs" 文件包含一个未以换行符终止的条目。
packedRefUnsorted-
(错误) "packed-refs" 文件未排序。
refMissingNewline-
(信息) 一个没有以换行符(LF)结尾的松散引用。由于 Git 的有效实现从未创建过这样的松散引用文件,因此将来可能会成为一个错误。如果您看到此错误,请报告给 git@vger.kernel.org 邮件列表,因为我们需要知道是哪些工具创建了这样的文件。
symlinkRef-
(信息) 符号链接被用作符号引用。如果您看到此错误,请报告给 git@vger.kernel.org 邮件列表,因为我们正在评估取消支持创建符号链接作为符号引用的可行性。
symrefTargetIsNotARef-
(信息) 符号引用的目标既不指向根引用,也不指向以"refs/"开头的引用。尽管我们允许使用
gitsymbolic-ref创建指向"ref"之外的引用对象的符号引用,但我们将来可能会收紧此规则。如果您看到此错误,请报告给 git@vger.kernel.org 邮件列表,因为我们需要知道是哪些工具创建了这样的文件。 trailingRefContent-
(信息) 松散引用包含尾随内容。由于 Git 的有效实现从未创建过这样的松散引用文件,因此将来可能会成为一个错误。如果您看到此错误,请报告给 git@vger.kernel.org 邮件列表,因为我们需要知道是哪些工具创建了这样的文件。
treeNotSorted-
(错误) 树未正确排序。
unknownType-
(错误) 发现未知对象类型。
unterminatedHeader-
(致命) 对象头中缺少行尾符。
zeroPaddedDate-
(错误) 在作者/提交者行中发现零填充日期。
zeroPaddedFilemode-
(警告) 在树中发现零填充文件模式。