设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.46.1 → 2.47.0 无变更
- 2.46.0 07/29/24
- 2.44.1 → 2.45.2 无变更
- 2.44.0 02/23/24
- 2.43.2 → 2.43.5 无变更
- 2.43.1 02/09/24
- 2.43.0 11/20/23
- 2.39.1 → 2.42.3 无变更
- 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
- 2.23.1 → 2.29.3 无变更
- 2.23.0 08/16/19
- 2.22.1 → 2.22.5 无变更
- 2.22.0 06/07/19
- 2.21.1 → 2.21.4 无变更
- 2.21.0 02/24/19
- 2.19.1 → 2.20.5 无变更
- 2.19.0 09/10/18
- 2.18.1 → 2.18.5 无变更
- 2.18.0 06/21/18
- 2.15.4 → 2.17.6 无变更
- 2.14.6 12/06/19
- 2.13.7 05/22/18
- 2.12.5 09/22/17
- 2.9.5 → 2.11.4 无变更
- 2.8.6 07/30/17
- 2.7.6 07/30/17
- 2.6.7 05/05/17
- 2.5.6 无变更
- 2.4.12 05/05/17
- 2.3.10 无变更
- 2.2.3 09/04/15
- 2.1.4 无变更
- 2.0.5 12/17/14
描述
- 备用对象数据库
- 裸仓库
-
裸仓库通常是一个带有
.git
后缀的适当命名的 目录,它没有本地签出任何受版本控制的文件的副本。也就是说,所有通常存在于隐藏的.git
子目录中的 Git 管理和控制文件都直接存在于repository.git
目录中,而不是其他文件存在和签出。通常,公共仓库的发布者会提供裸仓库。 - blob 对象
-
无类型的对象,例如文件的內容。
- 分支
-
“分支”是一条开发线。分支上最新的提交称为该分支的顶端。分支的顶端由分支头引用,当分支上进行更多开发时,它会向前移动。单个 Git 仓库可以跟踪任意数量的分支,但您的工作树只与其中一个分支(“当前”或“已签出”分支)相关联,并且HEAD指向该分支。
- 缓存
-
已弃用,请使用:索引.
- 链
- 变更集
-
BitKeeper/cvsps 对“提交”的说法。由于 Git 不存储更改,而是存储状态,因此在 Git 中使用术语“变更集”实际上没有意义。
- 签出
- cherry-picking
-
在SCM 行话中,“cherry pick”指的是从一系列更改(通常是提交)中选择一个子集,并将它们记录为在不同代码库之上的新一系列更改。在 Git 中,这是通过“git cherry-pick”命令来执行的,以提取由现有提交引入的更改,并在当前分支的顶端将其记录为新的提交。
- 干净
- 提交
-
作为名词:Git 历史中的一个点;项目的整个历史表示为一组相互关联的提交。“提交”一词在 Git 中经常用于其他版本控制系统使用“修订版本”或“版本”的地方。也用作提交对象的简写。
- 提交图的概念、表示和用法
-
对象数据库中提交形成的DAG 结构的同义词,使用它们链接的提交的链,由分支顶端引用。此结构是最终的提交图。该图可以用其他方式表示,例如“提交图”文件。
- 提交图文件
-
“提交图”(通常带连字符)文件是提交图的补充表示形式,它可以加速提交图遍历。“提交图”文件存储在 .git/objects/info 目录中,或者存储在备用对象数据库的 info 目录中。
- 提交对象
- 提交式(也称为 committish)
-
一个提交对象或一个可以递归反引用到提交对象的对象。以下是所有提交式:提交对象、指向提交对象的标签对象、指向指向提交对象的标签对象的标签对象,等等。
- 核心 Git
-
Git 的基本数据结构和实用程序。只公开有限的源代码管理工具。
- DAG
- 悬空对象
- 反引用
-
引用符号引用:访问符号引用指向的引用的操作。递归反引用包括在结果引用上重复上述过程,直到找到非符号引用。
引用提交对象:访问提交的树对象的操作。提交不能递归反引用。
除非另有说明,否则 Git 命令或协议上下文中的“反引用”隐式地是递归的。
- 分离的 HEAD
-
通常,HEAD 存储一个 分支 的名称,并且对 HEAD 所代表的历史进行操作的命令将对通向 HEAD 所指向的分支尖端的历史进行操作。但是,Git 也允许您 检出 一个任意的 提交,该提交不一定是最新的分支尖端。在这种状态下的 HEAD 被称为“分离的”。
请注意,在 HEAD 分离的情况下,对当前分支的历史进行操作的命令(例如,
git commit
用于在当前分支的基础上构建新的历史)仍然可以工作。它们会更新 HEAD 以指向更新后的历史的尖端,而不会影响任何分支。更新或查询有关当前分支的信息的命令(例如,git branch --set-upstream-to
用于设置当前分支与哪个远程跟踪分支集成)显然不能工作,因为在这种状态下没有(真正的)当前分支可以查询。 - 目录
-
使用 "ls" 命令得到的列表 :-)
- 脏的
- 恶意合并
- 快进
-
快进是一种特殊的 合并 类型,其中您有一个 版本,并且您正在“合并”另一个 分支 的更改,这些更改恰好是您所拥有版本的后代。在这种情况下,您不会创建新的 合并 提交,而是只更新您的分支以指向与您要合并的分支相同的版本。这将经常发生在远程 仓库 的 远程跟踪分支 上。
- 拉取
-
拉取一个 分支 意味着从远程 仓库 获取该分支的 头部引用,找出本地 对象数据库 中缺少哪些对象,并获取它们。另请参见 git-fetch[1]。
- 文件系统
-
Linus Torvalds 最初设计 Git 成为一个用户空间文件系统,即用于保存文件和目录的基础设施。这确保了 Git 的效率和速度。
- Git 归档
-
仓库 的同义词(对于 arch 用户)。
- git 文件
-
工作区根目录下的一个普通文件
.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 中,您必须使它们可执行。 - 索引
-
包含带有状态信息的集合文件,其内容存储为对象。索引是您的 工作区 的一个存储版本。事实上,它还可以包含工作区的第二个甚至第三个版本,这些版本在 合并 时使用。
- 索引条目
-
存储在 索引 中的有关特定文件的相关信息。如果 合并 已开始但尚未完成(即索引包含该文件的多个版本),则索引条目可以是未合并的。
- 主分支
-
默认的开发 分支。每当您创建一个 Git 仓库 时,就会创建一个名为“master”的分支,并成为活动分支。在大多数情况下,它包含本地开发,但这仅仅是约定,并非必需。
- 合并
-
作为动词:将另一个 分支(可能来自外部 仓库)的内容带入当前分支。如果要合并的分支来自不同的仓库,则首先 拉取 远程分支,然后将结果合并到当前分支。这种拉取和合并操作的组合被称为 拉取。合并由一个自动过程执行,该过程识别自分支分叉以来的更改,然后将所有这些更改一起应用。如果更改发生冲突,可能需要手动干预才能完成合并。
- 对象
-
Git 中的存储单元。它由其内容的 SHA-1 唯一标识。因此,对象无法更改。
- 对象数据库
- 对象标识符 (oid)
-
对象名称 的同义词。
- 对象名称
- 对象类型
- 章鱼
-
合并两个以上的 分支。
- 孤儿
- origin
-
默认的上游 仓库。大多数项目至少有一个他们跟踪的上游项目。默认情况下,origin 用于此目的。新的上游更新将被拉取到名为 origin/name-of-upstream-branch 的 远程跟踪分支 中,您可以使用
git branch -r
查看它们。 - 覆盖
-
仅更新和添加文件到工作区,但不删除它们,类似于 cp -R 如何更新目标目录中的内容。这是在 检出 时从 索引 或 树状标识 检出文件时的默认模式。相反,非覆盖模式还会删除源中不存在的跟踪文件,类似于 rsync --delete。
- 打包
-
一组已压缩到单个文件中的对象(为了节省空间或更高效地传输它们)。
- 打包索引
-
打包中对象的标识符列表和其他信息,用于帮助高效地访问打包的内容。
- 路径规范
-
用于限制 Git 命令中的路径的模式。
路径规范用于 "git ls-files"、"git ls-tree"、"git add"、"git grep"、"git diff"、"git checkout" 和许多其他命令的命令行,以将操作范围限制在树或工作区的一部分。有关路径是相对于当前目录还是相对于顶层,请参见每个命令的文档。路径规范语法如下
-
任何路径都匹配自身
-
路径规范直到最后一个斜杠代表目录前缀。该路径规范的范围限制在该子树中。
-
路径规范的其余部分是路径名的其余部分的模式。相对于目录前缀的路径将使用 fnmatch(3) 与该模式进行匹配;特别是,* 和 ? 可以匹配目录分隔符。
例如,Documentation/*.jpg 将匹配 Documentation 子树中的所有 .jpg 文件,包括 Documentation/chapter_1/figure_1.jpg。
以冒号
:
开头的路径规范具有特殊含义。在简短形式中,冒号:
后面跟着零个或多个“神奇签名”字母(可选地以另一个冒号:
结尾),其余部分是与路径匹配的模式。“神奇签名”由 ASCII 符号组成,这些符号既不是字母数字、通配符、正则表达式特殊字符,也不是冒号。如果模式以不属于“神奇签名”符号集且不是冒号的字符开头,则可以省略终止“神奇签名”的可选冒号。在长格式中,冒号
:
后面跟着一个左括号(
、零个或多个“神奇词”的逗号分隔列表,以及一个右括号)
,其余部分是与路径匹配的模式。只有冒号的路径规范意味着“没有路径规范”。此形式不应与其他路径规范组合。
- 顶部
-
神奇词
top
(神奇签名:/
)使模式从工作树的根目录匹配,即使您在子目录中运行命令也是如此。 - 文字
-
模式中的通配符,如
*
或?
,被视为文字字符。 - 不区分大小写
-
不区分大小写的匹配。
- 通配符
-
Git 将模式视为适合 fnmatch(3) 使用的 shell 通配符,具有 FNM_PATHNAME 标志:模式中的通配符不会匹配路径名中的 /。例如,“Documentation/*.html”匹配“Documentation/git.html”,但不匹配“Documentation/ppc/ppc.html”或“tools/perf/Documentation/perf.html”。
模式中两个连续的星号(“
**
”)与完整路径名匹配可能具有特殊含义-
以“
**
”开头,后跟一个斜杠,表示匹配所有目录中的文件或目录。例如,“**/foo
”匹配文件或目录“foo
”的任何位置,与模式“foo
”相同。“**/foo/bar
”匹配文件或目录“bar
”的任何位置,该位置直接在目录“foo
”下。 -
以“
/**
”结尾表示匹配内部的所有内容。例如,“abc/**
”匹配目录“abc”内的所有文件,相对于.gitignore
文件的位置,深度无限。 -
斜杠后跟两个连续的星号,然后是一个斜杠,表示匹配零个或多个目录。例如,“
a/**/b
”匹配“a/b
”、“a/x/b
”、“a/x/y/b
”等等。 -
其他连续的星号被认为是无效的。
通配符魔法与文字魔法不兼容。
-
- 属性
-
在
attr:
后面是一个以空格分隔的“属性要求”列表,所有这些要求都必须满足,才能将路径视为匹配;这除了通常的非魔法路径规范模式匹配之外。见 gitattributes[5].路径的每个属性要求都采用以下形式之一
-
"
ATTR
" 要求设置属性ATTR
。 -
"
-ATTR
" 要求未设置属性ATTR
。 -
"
ATTR=VALUE
" 要求将属性ATTR
设置为字符串VALUE
。 -
"
!ATTR
" 要求属性ATTR
未指定。请注意,当与树对象匹配时,属性仍然是从工作树中获取的,而不是从给定的树对象中获取的。
-
- 排除
-
在路径匹配任何非排除路径规范后,它将运行通过所有排除路径规范(神奇签名:
!
或其同义词^
)。如果匹配,则忽略该路径。当没有非排除路径规范时,排除将应用于结果集,就好像在没有任何路径规范的情况下调用一样。
-
- 父级
-
一个 提交对象 包含一个(可能是空的)逻辑前任列表,即其父级。
- 剥离
- 镐
-
术语 镐 指的是 diffcore 例程的一个选项,该选项有助于选择添加或删除给定文本字符串的更改。使用
--pickaxe-all
选项,它可以用来查看引入或删除(例如,特定行文本)的完整 变更集。见 git-diff[1]. - 管道
-
核心 Git 的可爱名称。
- 瓷器
-
依赖于 核心 Git 的程序和程序套件的可爱名称,提供对核心 Git 的高级访问。瓷器比 管道 公开了更多 SCM 接口。
- 每个工作树的引用
-
每个 工作树 的引用,而不是全局的。目前只有 HEAD 和任何以
refs/bisect/
开头的引用,但以后可能会包括其他不常见的引用。 - 伪引用
-
与普通引用具有不同语义的引用。这些引用可以通过正常的 Git 命令读取,但不能通过像 git-update-ref[1] 这样的命令写入。
以下伪引用是 Git 已知的
-
FETCH_HEAD
由 git-fetch[1] 或 git-pull[1] 写入。它可能引用多个对象 ID。每个对象 ID 都会使用元数据进行注释,这些元数据指示它从何处获取以及它的获取状态。 -
MERGE_HEAD
由 git-merge[1] 在解决合并冲突时写入。它包含所有正在合并的提交 ID。
-
- 拉取
-
拉取 分支 意味着 获取 它并 合并 它。另见 git-pull[1].
- 推送
-
推送 分支 意味着从远程 仓库 获取分支的 头部引用,确定它是否为分支本地头部引用的祖先,如果是,则将所有对象(从本地头部引用可 到达,并且远程仓库中不存在)放入远程 对象数据库 中,并更新远程头部引用。如果远程 头部 不是本地头部引用的祖先,则推送失败。
- 可到达
-
给定 提交 的所有祖先都被称为从该提交“可到达”。更一般地说,如果我们可以通过遵循 标签 到它们标记的内容、提交 到它们的父级或树以及 树 到它们包含的树或 blob 的 链 从一个 对象 到达另一个 对象,那么一个 对象 就可从另一个 对象 到达。
- 可达性位图
-
可达性位图存储有关选定提交集在包文件或多包索引 (MIDX) 中的可 到达性 的信息,以加快对象搜索速度。位图存储在“.bitmap”文件中。仓库最多可以使用一个位图文件。位图文件可能属于一个包,也可能属于仓库的多包索引(如果存在)。
- 变基
- 引用
-
一个指向 对象名称 或另一个引用的名称(后者称为 符号引用)。为了方便起见,引用有时可以在用作 Git 命令的参数时进行缩写;有关详细信息,请参阅 gitrevisions[7]。引用存储在 仓库 中。
引用命名空间是分层的。引用名称必须以
refs/
开头,或者位于层次结构的根目录中。对于后者,它们的名称必须遵循以下规则-
名称仅包含大写字母或下划线。
-
名称以“
_HEAD
”结尾,或等于“HEAD
”。层次结构根目录中有一些不规则引用与这些规则不匹配。以下列表是详尽无遗的,将来不会扩展
-
AUTO_MERGE
-
BISECT_EXPECTED_REV
-
NOTES_MERGE_PARTIAL
-
NOTES_MERGE_REF
-
MERGE_AUTOSTASH
不同的子层次结构用于不同的目的。例如,
refs/heads/
层次结构用于表示本地分支,而refs/tags/
层次结构用于表示本地标签。
-
- 引用日志
-
引用日志显示引用的本地“历史记录”。换句话说,它可以告诉您此仓库中的第 3 个最后修订是什么,以及昨天晚上 9:14pm 此仓库中的当前状态是什么。有关详细信息,请参阅 git-reflog[1].
- 引用规范
-
“引用规范”由 获取 和 推送 使用,以描述远程 引用 和本地引用之间的映射。有关详细信息,请参阅 git-fetch[1] 或 git-push[1].
- 远程仓库
- 远程跟踪分支
-
一个用于跟踪另一个仓库更改的引用。它通常看起来像 refs/remotes/foo/bar(表示它跟踪名为 foo 的远程仓库中的名为 bar 的分支),并与配置的 fetch 引用规范 的右侧匹配。远程跟踪分支不应该包含直接修改或对其进行本地提交。
- 仓库
-
一个引用集合,以及一个对象数据库,其中包含所有从引用可达的对象,可能还伴随来自一个或多个瓷器的元数据。一个仓库可以通过备用对象数据库机制与其他仓库共享对象数据库。
- 解决
-
修复失败的自动合并留下的手动操作。
- 修订版
-
提交(名词)的同义词。
- 回溯
- SCM
-
源代码管理(工具)。
- SHA-1
-
"安全散列算法 1";一种密码散列函数。在 Git 的语境中,它被用作对象名称的同义词。
- 浅克隆
-
主要等同于浅仓库,但该短语更明确地表明它是通过运行
git clone --depth=...
命令创建的。 - 浅仓库
-
一个浅层仓库具有不完整的历史记录,其中一些提交的父级已被切断(换句话说,Git 被告知要假装这些提交没有父级,即使它们被记录在提交对象中)。当您只对项目最近的历史记录感兴趣,即使上游记录的实际历史记录大得多时,这有时很有用。浅仓库是通过在git-clone[1]中提供
--depth
选项创建的,其历史记录可以通过git-fetch[1]稍后加深。 - 隐藏条目
- 子模块
- 上级项目
- 符号引用
-
符号引用:它不包含SHA-1 ID 本身,而是采用 ref: refs/some/thing 的格式,当被引用时,它会递归地解除引用到该引用。HEAD 是符号引用的一个典型例子。符号引用可以通过git-symbolic-ref[1] 命令进行操作。
- 标签
-
一个位于
refs/tags/
命名空间下的引用,它指向一个任意类型的对象(通常标签指向一个标签或一个提交对象)。与HEAD 不同,标签不会被commit
命令更新。Git 标签与 Lisp 标签无关(在 Git 的上下文中,Lisp 标签将被称为对象类型)。标签最常用于标记提交祖先链中的一个特定点。 - 标签对象
-
一个对象,它包含一个指向另一个对象的引用,该引用可以像提交对象一样包含消息。它还可以包含一个(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] 套件的一部分