设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 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
-
(警告)在树中发现零填充文件模式。