设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
修补
调试
电子邮件
外部系统
服务器管理员
指南
管理
管道命令
- 2.44.0 02/23/24
- 2.43.2 → 2.43.3 无更改
- 2.43.1 02/09/24
- 2.43.0 11/20/23
- 2.39.1 → 2.42.1 无更改
- 2.39.0 12/12/22
- 2.36.1 → 2.38.5 无更改
- 2.36.0 04/18/22
- 2.33.1 → 2.35.8 无更改
- 2.33.0 08/16/21
- 2.30.1 → 2.32.7 无更改
- 2.30.0 12/27/20
说明
- 备用对象数据库
- 裸存储库
-
裸存储库通常是一个适当命名的 目录,带有
.git
后缀,它没有版本控制下任何文件的本地检出副本。也就是说,通常存在于隐藏的.git
子目录中的所有 Git 管理和控制文件都直接存在于repository.git
目录中,并且没有其他文件存在和检出。通常,公共存储库的发布者会提供裸存储库。 - Blob 对象
-
未类型化的 对象,例如文件的内容。
- 分支
-
“分支”是一条开发线。分支上的最新 提交称为该分支的提示。分支的提示由分支 头部 引用,随着分支上进行其他开发,头部会向前移动。单个 Git 存储库 可以跟踪任意数量的分支,但你的 工作树 只与其中一个分支(“当前”或“检出”分支)关联,HEAD 指向该分支。
- 缓存
-
已废弃:索引。
- 链
- 变更集
-
BitKeeper/cvsps 表示为“提交”。由于 Git 不存储更改,而是状态,因此在 Git 中使用术语“变更集”实际上没有意义。
- 检出
- 挑选
-
在SCM术语中,“挑选”是指从一系列更改(通常是提交)中选择一个更改子集,并将其记录为一个新更改系列,位于不同的代码库之上。在 Git 中,这是由“git cherry-pick”命令执行的,该命令提取现有提交引入的更改,并将其基于当前分支的提示记录为新提交。
- 干净
- 提交
-
作为名词:Git 历史中的一个单点;项目的整个历史表示为一组相互关联的提交。Git 通常在其他版本控制系统使用“修订版”或“版本”一词的相同位置使用“提交”一词。也用作提交对象的简写。
- 提交图概念、表示和用法
-
对象数据库中由提交形成的 DAG 结构的同义词,由分支提示 引用,使用其链接提交的 链。此结构是明确的提交图。该图可以用其他方式表示,例如 "commit-graph" 文件。
- commit-graph 文件
-
"commit-graph"(通常连字符分隔)文件是 提交图 的补充表示,它可以加速提交图遍历。"commit-graph" 文件存储在 .git/objects/info 目录或备用对象数据库的 info 目录中。
- 提交对象
- commit-ish(也称为 committish)
-
提交对象 或可以递归 取消引用 为提交对象的 对象。以下都是 commit-ish:提交对象、指向提交对象的 标签对象、指向指向提交对象的标签对象的标签对象,等等。
- 核心 Git
-
Git 的基本数据结构和实用程序。仅公开有限的源代码管理工具。
- DAG
-
有向无环图。提交对象 形成有向无环图,因为它们有父级(有向),并且提交对象的图是无环的(没有从同一个 对象 开始和结束的 链)。
- 悬空对象
- 取消引用
-
引用 符号引用:访问符号引用指向的 引用 的操作。递归取消引用涉及对结果引用重复上述过程,直到找到非符号引用。
引用标签对象:访问标签指向的对象的操作。标签通过对结果对象重复操作来递归地取消引用,直到结果具有指定的对象类型(如果适用)或任何非“标签”对象类型。在标签上下文中,“递归取消引用”的同义词是“剥离”。
引用提交对象:访问提交的树对象的操作。无法递归取消引用提交。
除非另有说明,否则在 Git 命令或协议上下文中使用的“取消引用”隐式递归。
- 游离 HEAD
-
通常,HEAD 存储分支的名称,而对 HEAD 表示的历史记录进行操作的命令对 HEAD 指向的分支的尖端导致的历史记录进行操作。但是,Git 还允许您检出任意提交,而该提交不一定特定分支的尖端。处于这种状态的 HEAD 称为“游离”。
请注意,对当前分支的历史记录进行操作的命令(例如,
git commit
在其之上构建新历史记录)在 HEAD 游离时仍然有效。它们更新 HEAD 以指向更新的历史记录的尖端,而不影响任何分支。更新或查询有关当前分支的信息的命令(例如,设置当前分支与之集成的远程跟踪分支的git branch --set-upstream-to
)显然不起作用,因为在此状态下没有(真正的)当前分支可供询问。 - 目录
-
使用“ls”获得的列表 :-)
- 未提交
- 恶意合并
- 快速转发
-
快进是一种特殊类型的合并,其中您有一个修订,并且正在“合并”另一个分支的恰好是您所拥有的后代的更改。在这种情况下,您不会创建一个新的合并提交,而是仅更新您的分支以指向与您正在合并的分支相同的修订。这经常发生在远程存储库的远程跟踪分支上。
- 获取
-
获取分支意味着从远程存储库获取分支的头引用,找出哪些对象从本地对象数据库中丢失,并获取它们。另请参阅git-fetch[1]。
- 文件系统
-
Linus Torvalds最初设计Git为用户空间文件系统,即用于保存文件和目录的基础设施。这确保了Git的效率和速度。
- Git存档
-
存储库的同义词(对于arch人员)。
- gitfile
-
工作树根目录中的一个普通文件
.git
,指向作为真实存储库的目录。有关正确用法,请参阅git-worktree[1]或git-submodule[1]。有关语法,请参阅gitrepository-layout[5]。 - 嫁接
-
嫁接使两条原本不同的开发线通过为提交记录虚假的祖先信息而连接在一起。通过这种方式,您可以让Git假装提交的父项集合与提交创建时记录的不同。通过
.git/info/grafts
文件进行配置。请注意,嫁接机制已过时,并且可能导致在存储库之间传输对象时出现问题;请参阅git-replace[1]以获取一个更灵活、更健壮的系统来执行相同操作。
- 哈希
-
在Git的上下文中,对象名称的同义词。
- 头部
-
命名引用到提交在分支的提示。头部存储在
$GIT_DIR/refs/heads/
目录中的文件中,但使用打包引用时除外。(参见git-pack-refs[1]。) - HEAD
-
当前分支。更详细地说:您的工作树通常源自 HEAD 引用的树的状态。HEAD 是对存储库中某个头部的引用,但使用分离的 HEAD除外,在这种情况下,它直接引用任意提交。
- 头部引用
-
头部的同义词。
- 钩子
-
在几个 Git 命令的正常执行过程中,会调用可选脚本,允许开发人员添加功能或检查。通常,钩子允许对命令进行预验证并可能中止,并允许在操作完成后进行事后通知。钩子脚本位于
$GIT_DIR/hooks/
目录中,只需从文件名中删除.sample
后缀即可启用。在早期版本的 Git 中,您必须使它们可执行。 - 索引
-
一个包含状态信息的集合,其内容存储为对象。索引是工作树的存储版本。说实话,它还可以包含工作树的第二个,甚至第三个版本,这些版本在合并时使用。
- 索引条目
- master
-
默认开发分支。每当您创建 Git存储库时,都会创建一个名为“master”的分支,并成为活动分支。在大多数情况下,这包含本地开发,尽管这纯粹是约定俗成,并不是必需的。
- 合并
-
作为动词:将另一个分支(可能来自外部存储库)的内容带入当前分支。如果合并的分支来自不同的存储库,则首先通过获取远程分支,然后将结果合并到当前分支中。获取和合并操作的这种组合称为拉取。合并由一个自动过程执行,该过程识别自分支分歧以来所做的更改,然后将所有这些更改一起应用。在更改冲突的情况下,可能需要手动干预才能完成合并。
- 对象
-
Git 中的存储单元。它由其内容的 SHA-1 唯一标识。因此,对象无法更改。
- 对象数据库
- 对象标识符 (oid)
-
对象名称 的同义词。
- 对象名称
- 对象类型
- 章鱼
- 孤儿
-
进入尚不存在的 分支(即 未出生 分支)的行为。此类操作后,首先创建的提交将成为没有父级的提交,从而开始一个新的历史记录。
- 源
-
默认上游 存储库。大多数项目至少有一个他们跟踪的上游项目。默认情况下,origin 用于此目的。新的上游更新将获取到名为 origin/name-of-upstream-branch 的 远程跟踪分支 中,你可以使用
git branch -r
查看。 - 覆盖
-
仅更新和将文件添加到工作目录,但不删除它们,类似于 cp -R 如何更新目标目录中的内容。这是从 索引 或 树状 检出文件时 检出 中的默认模式。相比之下,非覆盖模式还会删除源中不存在的已跟踪文件,类似于 rsync --delete。
- 包
-
已压缩到一个文件中的一组对象(为了节省空间或高效地传输它们)。
- pack 索引
-
一个 pack 中对象的标识符列表和其他信息,以帮助有效地访问 pack 的内容。
- pathspec
-
用于限制 Git 命令中路径的模式。
Pathspec 用于“git ls-files”、“git ls-tree”、“git add”、“git grep”、“git diff”、“git checkout”和许多其他命令的命令行中,以将操作范围限制为树或工作树的某个子集。请参阅每个命令的文档,了解路径是相对于当前目录还是顶级目录。pathspec 语法如下
-
任何路径都匹配它自身
-
pathspec 直到最后一个斜杠表示目录前缀。该 pathspec 的范围仅限于该子树。
-
pathspec 的其余部分是路径名其余部分的模式。相对于目录前缀的路径将使用 fnmatch(3) 与该模式进行匹配;特别是,* 和 ? 可以 匹配目录分隔符。
例如,Documentation/*.jpg 将匹配 Documentation 子树中的所有 .jpg 文件,包括 Documentation/chapter_1/figure_1.jpg。
以冒号
:
开头的 pathspec 具有特殊含义。在简短形式中,前导冒号:
后跟零个或多个“神奇签名”字母(可选地以另一个冒号:
结尾),其余部分是与路径匹配的模式。“神奇签名”由既不是字母数字、glob、regex 特殊字符也不是冒号的 ASCII 符号组成。如果模式以不属于“神奇签名”符号集且不是冒号的字符开头,则可以省略终止“神奇签名”的可选冒号。在长形式中,前导冒号
:
后跟一个左括号(
、一个由零个或多个“神奇单词”组成的逗号分隔列表和一个右括号)
,其余部分是与路径匹配的模式。仅包含冒号的路径规范表示“没有路径规范”。此表单不应与其他路径规范结合使用。
- top
-
魔术词
top
(魔术签名:/
)使模式从工作树的根部进行匹配,即使您从子目录内部运行命令也是如此。 - literal
-
模式中的通配符(如
*
或?
)被视为文字字符。 - icase
-
不区分大小写的匹配。
- glob
-
Git 将模式视为适合 fnmatch(3) 使用的 shell glob,并带有 FNM_PATHNAME 标志:模式中的通配符不会与路径名中的 / 匹配。例如,“Documentation/*.html”匹配“Documentation/git.html”,但不匹配“Documentation/ppc/ppc.html”或“tools/perf/Documentation/perf.html”。
针对完整路径名匹配的模式中连续出现的两个星号(“
**
”)可能具有特殊含义-
以“
**
”开头,后跟斜杠表示在所有目录中匹配。例如,“**/foo
”匹配任何位置的文件或目录“foo
”,与模式“foo
”相同。“**/foo/bar
”匹配直接位于目录“foo
”下的任何位置的文件或目录“bar
”。 -
尾随的“
/**
”匹配内部的所有内容。例如,“abc/**
”匹配相对于.gitignore
文件位置的目录“abc”内的所有文件,深度无限。 -
斜杠后跟连续两个星号,然后斜杠匹配零个或多个目录。例如,“
a/**/b
”匹配“a/b
”、“a/x/b
”、“a/x/y/b
”等。 -
其他连续的星号被视为无效。
Glob 魔术与文字魔术不兼容。
-
- attr
-
在
attr:
之后是一个以空格分隔的“属性要求”列表,路径必须满足所有这些要求才能被视为匹配;这除了通常的非魔术路径规范模式匹配之外。请参阅 gitattributes[5]。路径的每个属性要求都采用以下形式之一
-
"
ATTR
" 要求设置属性ATTR
。 -
"
-ATTR
" 要求取消设置属性ATTR
。 -
"
ATTR=VALUE
" 要求将属性ATTR
设置为字符串VALUE
。 -
"
!ATTR
" 要求未指定属性ATTR
。请注意,在针对树对象进行匹配时,属性仍从工作树获取,而不是从给定的树对象获取。
-
- exclude
-
路径与任何非排除路径规范匹配后,它将通过所有排除路径规范(魔术签名:
!
或其同义词^
)运行。如果匹配,则忽略该路径。如果没有非排除路径规范,则排除将应用于结果集,就像在不带任何路径规范的情况下调用一样。
-
- 父级
-
提交对象包含开发线中逻辑前驱(即其父级)的(可能为空的)列表。
- 剥离
- 十字镐
-
十字镐一词是指 diffcore 例程的一个选项,该选项有助于选择添加或删除给定文本字符串的更改。使用 `--pickaxe-all` 选项,可以用来查看引入或删除特定文本行的完整变更集。请参阅 git-diff[1]。
- 管道
-
核心 Git 的可爱名称。
- 瓷器
- 每个工作树引用
-
每个工作树的引用,而不是全局引用。目前仅为HEAD和以 `refs/bisect/` 开头的任何引用,但以后可能包括其他不寻常的引用。
- 伪引用
-
伪引用是 `$GIT_DIR` 下的一类文件,它们在 rev-parse 的目的上表现得像引用,但被 git 特殊对待。伪引用的名称均为大写,并且始终以一行由SHA-1后跟空格组成的行开头。因此,HEAD 不是伪引用,因为它有时是符号引用。它们还可以选择包含一些附加数据。`MERGE_HEAD` 和 `CHERRY_PICK_HEAD` 就是示例。与每个工作树引用不同,这些文件不能是符号引用,并且永远没有引用日志。它们也不能通过正常的引用更新机制进行更新。相反,它们是通过直接写入文件来更新的。但是,可以将它们读作引用,因此 `git rev-parse MERGE_HEAD` 将起作用。
- 拉取
-
拉取分支意味着获取并合并它。另请参阅 git-pull[1]。
- 推送
-
推送 分支 意味着从远程 存储库 获取分支的 HEAD 引用,找出它是否是分支的本地 HEAD 引用祖先,如果是,则将所有从本地 HEAD 引用 可达 且远程存储库中缺失的对象放入远程 对象数据库,并更新远程 HEAD 引用。如果远程 HEAD 不是本地 HEAD 的祖先,则推送失败。
- 可达
-
给定 提交 的所有祖先都称为从该提交“可达”。更普遍地说,如果我们可以通过遵循 标签(指向它们标记的任何内容)、提交(指向它们的父级或树)和 树(指向它们包含的树或 Blob)的 链 从一个 对象 到达另一个对象,则一个对象可达另一个对象。
- 可达性位图
-
可达性位图存储有关包文件或多包索引 (MIDX) 中选定一组提交的 可达性 的信息,以加快对象搜索速度。位图存储在“.bitmap”文件中。一个存储库最多可以使用一个位图文件。位图文件可以属于一个包或存储库的多包索引(如果存在)。
- 变基
- 引用
-
以
refs/
开头的名称(例如refs/heads/master
),指向 对象名称 或其他引用(后者称为 符号引用)。为了方便,引用有时可以在用作 Git 命令的参数时缩写;有关详细信息,请参阅 gitrevisions[7]。引用存储在 存储库 中。引用命名空间是分层的。不同的子层次用于不同的目的(例如,
refs/heads/
层次用于表示本地分支)。有几个特殊用途的引用,它们不以
refs/
开头。最著名的例子是HEAD
。 - reflog
-
reflog 显示了某个引用的本地“历史”。换句话说,它可以告诉你此存储库中的第 3 个最后修订版是什么,以及昨天晚上 9:14 此存储库中的当前状态是什么。有关详细信息,请参阅 git-reflog[1]。
- refspec
- 远程存储库
- 远程跟踪分支
-
用于跟踪来自另一个 存储库 的更改的 ref。它通常看起来像 refs/remotes/foo/bar(表示它跟踪名为 bar 的分支,位于名为 foo 的远程存储库中),并且与已配置的 fetch refspec 的右侧匹配。远程跟踪分支不应包含直接修改或对其进行本地提交。
- 存储库
-
Ref 的集合以及 对象数据库,其中包含从 ref 可达 的所有对象,可能还附带来自一个或多个 porcelain 的元数据。存储库可以通过 备用机制 与其他存储库共享对象数据库。
- 解决
-
修复失败的自动 合并 留下的内容的手动操作。
- 修订版
-
提交(名词)的同义词。
- 倒带
- SCM
-
源代码管理(工具)。
- SHA-1
-
"安全哈希算法 1";一种加密哈希函数。在 Git 的上下文中,用作 对象名称 的同义词。
- 浅克隆
-
基本上是 浅存储库 的同义词,但该短语更明确地表明它是通过运行
git clone --depth=...
命令创建的。 - 浅存储库
-
浅 存储库 具有不完整的历史记录,其中一些 提交 的 父级 已被切除(换句话说,Git 被告知假装这些提交没有父级,即使它们记录在 提交对象 中)。当您仅对项目的近期历史记录感兴趣时,这有时很有用,即使上游记录的真实历史记录更大。通过向 git-clone[1] 提供
--depth
选项来创建浅存储库,并且以后可以使用 git-fetch[1] 加深其历史记录。 - 暂存条目
- 特殊引用
-
语义不同于普通引用的引用。可以在某些情况下通过正常的 Git 命令访问这些引用,但可能与普通引用表现不同。
Git 已知以下特殊引用
-
"
FETCH_HEAD
" 由 git-fetch[1] 或 git-pull[1] 编写。它可能引用多个对象 ID。每个对象 ID 都带有元数据,指示从何处获取以及其获取状态。 -
"
MERGE_HEAD
" 由 git-merge[1] 在解决合并冲突时编写。它包含所有正在合并的提交 ID。
-
- 子模块
- 超级项目
- 符号引用
-
符号引用:它不包含 SHA-1 id 本身,而是采用格式 ref: refs/some/thing,并且在引用时,它会递归 反引用 到此引用。HEAD 是符号引用的一个典型示例。符号引用使用 git-symbolic-ref[1] 命令进行操作。
- 标签
-
refs/tags/
命名空间下的 引用,指向任意类型的对象(通常标签指向 标签 或 提交对象)。与 头 相反,标签不会通过commit
命令更新。Git 标签与 Lisp 标签无关(在 Git 的上下文中称为 对象类型)。标签最常用于标记提交祖先 链 中的特定点。 - 标签对象
-
包含指向另一个对象的 引用 的 对象,该对象可以包含与 提交对象 一样的消息。它还可以包含 (PGP) 签名,在这种情况下,它被称为“签名标签对象”。
- 主题分支
-
开发人员用来识别概念开发线的常规 Git 分支。由于分支非常简单且成本低廉,因此通常需要有几个小分支,每个分支都包含定义非常明确的概念或小增量但相关的更改。
- 树
- 树对象
- 树状 (也称树状)
-
树对象或 对象,可以递归 解除引用 到树对象。解除引用 提交对象 会产生与 修订版 的顶级 目录 相对应的树对象。以下都是树状: 提交状、树对象、指向树对象的 标签对象、指向指向树对象的标签对象的标签对象等。
- 未出生
-
HEAD 可以指向尚未存在的且尚未提交任何内容的分支,此类分支称为未出生分支。用户遇到未出生分支的最常见方式是在没有从其他地方克隆的情况下重新创建一个存储库。HEAD 将指向尚未出生的main(或master,取决于你的配置)分支。此外,某些操作可以通过其孤立选项让你进入未出生分支。
- 未合并索引
- 不可达对象
- 上游分支
-
合并到目标分支(或对目标分支进行变基)的默认分支。它通过 branch.<name>.remote 和 branch.<name>.merge 进行配置。如果A 的上游分支是 origin/B,有时我们会说“A 正在跟踪 origin/B”。
- 工作树
-
实际检出文件的树。工作树通常包含HEAD 提交树的内容,以及你所做的但尚未提交的任何本地更改。
- 工作区
-
一个存储库可以有零个(即裸存储库)或一个或多个附加到它的工作区。一个“工作区”由一个“工作树”和存储库元数据组成,其中大部分在单个存储库的其他工作区之间共享,而有些则每个工作区单独维护(例如索引、HEAD 和伪引用,如 MERGE_HEAD、每个工作区的引用和每个工作区的配置文件)。
GIT
git[1] 套件的一部分