设置和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.48.1 → 2.49.0 无更改
-
2.48.0
2025-01-10
- 2.46.1 → 2.47.2 无更改
-
2.46.0
2024-07-29
- 2.44.1 → 2.45.3 无更改
-
2.44.0
2024-02-23
- 2.43.2 → 2.43.6 无更改
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.39.1 → 2.42.4 无更改
-
2.39.0
2022-12-12
- 2.36.1 → 2.38.5 无更改
-
2.36.0
2022-04-18
- 2.33.1 → 2.35.8 无更改
-
2.33.0
2021-08-16
- 2.30.1 → 2.32.7 无更改
-
2.30.0
2020-12-27
- 2.23.1 → 2.29.3 无更改
-
2.23.0
2019-08-16
- 2.22.1 → 2.22.5 无更改
-
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.18.1 → 2.18.5 无更改
-
2.18.0
2018-06-21
- 2.15.4 → 2.17.6 无更改
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
- 2.9.5 → 2.11.4 无更改
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
- 2.5.6 无更改
-
2.4.12
2017-05-05
- 2.3.10 无更改
-
2.2.3
2015-09-04
- 2.1.4 无更改
-
2.0.5
2014-12-17
描述
- 备用对象数据库
- 裸仓库
-
裸仓库通常是带有
.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 目录中。
- 提交对象
- 类似提交(也称 committish)
-
一个提交对象或可以递归解引用到提交对象的对象。以下都是类似提交:提交对象、指向提交对象的标签对象、指向指向提交对象的标签对象的标签对象等等。
- 核心 Git
-
Git 的基本数据结构和实用程序。仅公开有限的源代码管理工具。
- DAG
-
有向无环图。提交对象形成一个有向无环图,因为它们有父级(有向),并且提交对象的图是无环的(没有以相同对象开始和结束的链)。
- 悬挂对象
- 解引用
-
提及符号引用:访问符号引用所指向的引用的行为。递归解引用涉及对结果引用重复上述过程,直到找到非符号引用。
提及标签对象:访问标签所指向的对象的行为。通过对结果对象重复该操作来递归解引用标签,直到结果具有指定的对象类型(如果适用)或任何非“tag”对象类型。在标签上下文中,“递归解引用”的同义词是“剥离”。
提及提交对象:访问提交的树对象的行为。提交不能被递归解引用。
除非另有说明,否则在 Git 命令或协议上下文中使用的“解引用”是指隐式的递归解引用。
- 分离 HEAD
-
通常,HEAD 存储分支的名称,并且对 HEAD 所代表的历史记录进行操作的命令,会对 HEAD 所指向的分支顶端的历史记录进行操作。但是,Git 也允许您检出一个任意的提交,该提交不一定是任何特定分支的顶端。在这种状态下,HEAD 称为“分离”。
请注意,当 HEAD 处于分离状态时,对当前分支历史记录进行操作的命令(例如,
git commit
以在其之上构建新历史记录)仍然有效。它们会更新 HEAD 以指向更新后的历史记录的顶端,而不会影响任何分支。更新或查询关于当前分支信息的命令(例如,git branch --set-upstream-to
设置当前分支与哪个远程跟踪分支集成)显然不起作用,因为在这种状态下没有(真实的)当前分支可供询问。 - 目录
-
您使用 "ls" 获取的列表 :-)
- 脏
- 邪恶合并
- 快进
-
快进是一种特殊的合并类型,其中您有一个版本,并且您正在“合并”另一个分支的更改,这些更改恰好是您拥有的内容的后代。 在这种情况下,您不会创建一个新的合并提交,而是仅更新您的分支以指向与您正在合并的分支相同的版本。这会在远程仓库的远程跟踪分支上频繁发生。
- 抓取
-
抓取分支意味着从远程仓库获取分支的head ref,以找出本地对象数据库中缺少哪些对象,并获取它们。 另请参见 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 的上下文中,对象名称的同义词。
- head
-
指向分支顶端的提交的命名引用。 头存储在
$GIT_DIR/refs/heads/
目录中的文件中,除非使用打包的引用。(请参见 git-pack-refs[1]。) - HEAD
-
当前的分支。 更详细地说:您的工作区通常从 HEAD 引用的树的状态派生而来。 HEAD 是对存储库中head之一的引用,除非使用分离的 HEAD,在这种情况下,它直接引用任意提交。
- head ref
-
head 的同义词。
- 钩子
-
在几个 Git 命令的正常执行过程中,会调用可选脚本,这些脚本允许开发人员添加功能或检查。 通常,钩子允许对命令进行预验证并可能中止,并允许在操作完成后进行后通知。 钩子脚本位于
$GIT_DIR/hooks/
目录中,只需从文件名中删除.sample
后缀即可启用。 在 Git 的早期版本中,您必须使它们可执行。 - 索引
-
具有 stat 信息的文件的集合,其内容存储为对象。 索引是工作区的存储版本。 事实上,它还可以包含第二个甚至第三个工作区的版本,这些版本在合并时使用。
- 索引条目
-
存储在索引中的关于特定文件的信息。 如果合并已启动但尚未完成(即,如果索引包含该文件的多个版本),则索引条目可能未合并。
- master
-
默认的开发分支。 每当您创建一个 Git 仓库时,都会创建一个名为“master”的分支,并成为活动分支。 在大多数情况下,这包含本地开发,但这纯粹是约定,并非必需。
- 合并
-
作为动词:将另一个分支的内容(可能来自外部仓库)带入当前分支。 如果合并的分支来自不同的仓库,则首先抓取远程分支,然后将结果合并到当前分支。 fetch 和 merge 操作的这种组合称为 pull。 合并由自动过程执行,该过程识别自分支发散以来所做的更改,然后将所有这些更改一起应用。 如果更改发生冲突,则可能需要手动干预才能完成合并。
- 对象
-
Git 中的存储单元。 它由其内容的 SHA-1 唯一标识。 因此,对象无法更改。
- 对象数据库
- 对象标识符 (oid)
-
对象名称的同义词。
- 对象名称
- 对象类型
- 章鱼
- 孤儿
-
进入尚不存在的分支(即未出生分支)的行为。 在这样的操作之后,首先创建的提交将成为没有父级的提交,从而开始一个新的历史记录。
- origin
-
默认的上游仓库。 大多数项目至少有一个他们跟踪的上游项目。 默认情况下,origin 用于此目的。 新的上游更新将被获取到名为 origin/上游分支名称 的远程跟踪分支中,您可以使用
git branch -r
来查看它们。 - 覆盖 (overlay)
-
仅更新和添加文件到工作目录,但不删除它们,类似于 cp -R 更新目标目录中的内容的方式。 这是从索引或tree-ish中检出文件时,检出的默认模式。 相比之下,no-overlay 模式还会删除源中不存在的已跟踪文件,类似于 rsync --delete。
- 包 (pack)
-
一组已被压缩成一个文件的对象(为了节省空间或有效地传输它们)。
- 包索引 (pack index)
-
包中对象的标识符和其他信息的列表,以帮助高效地访问包的内容。
- 路径规格 (pathspec)
-
用于限制 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。
以冒号
:
开头的路径规格具有特殊含义。 在短格式中,前导冒号:
后跟零个或多个“魔术签名”字母(可以选择用另一个冒号:
终止),其余部分是与路径匹配的模式。 “魔术签名”由既不是字母数字、glob、正则表达式特殊字符也不是冒号的 ASCII 符号组成。 如果模式以不属于“魔术签名”符号集且不是冒号的字符开头,则可以省略终止“魔术签名”的可选冒号。在长格式中,前导冒号
:
后跟一个左括号(
、一个逗号分隔的零个或多个“魔术词”列表和一个右括号)
,其余部分是与路径匹配的模式。仅包含冒号的路径规格表示“没有路径规格”。 此形式不应与其他路径规格组合使用。
- top
-
魔术词
top
(魔术签名:/
)使模式从工作树的根目录开始匹配,即使您是从子目录中运行命令。 - literal
-
模式中的通配符(如
*
或?
)被视为文字字符。 - icase
-
不区分大小写的匹配。
- glob
-
Git 将该模式视为适合 fnmatch(3) 使用 FNM_PATHNAME 标志的 shell glob:模式中的通配符将不匹配路径名中的 /。 例如,“Documentation/*.html”匹配“Documentation/git.html”,但不匹配“Documentation/ppc/ppc.html”或“tools/perf/Documentation/perf.html”。
在与完整路径名匹配的模式中,两个连续的星号 (“
**
”) 可能具有特殊含义-
前导的“
**
”后跟一个斜杠表示在所有目录中匹配。 例如,“**/foo
”匹配任何地方的文件或目录“foo
”,与模式“foo
”相同。 “**/foo/bar
”匹配直接位于目录“foo
”下的任何地方的文件或目录“bar
”。 -
尾随的“
/**
”匹配内部的所有内容。 例如,“abc/**
”匹配目录“abc”内的所有文件,相对于.gitignore
文件的位置,具有无限深度。 -
一个斜杠后跟两个连续的星号,然后是一个斜杠,匹配零个或多个目录。 例如,“
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
-
在路径匹配任何非排除路径规格后,它将通过所有排除路径规格(魔术签名:
!
或其同义词^
)运行。 如果它匹配,则忽略该路径。 当没有非排除路径规格时,排除将应用于结果集,就像在没有任何路径规格的情况下调用一样。
-
- 父项 (parent)
-
提交对象包含开发线中逻辑前任(即其父项)的(可能为空的)列表。
- 剥离 (peel)
- 镐 (pickaxe)
-
术语 镐是指 diffcore 例程的一个选项,该选项有助于选择添加或删除给定文本字符串的更改。 使用
--pickaxe-all
选项,它可以用于查看引入或删除(例如)特定文本行的完整变更集。 见 git-diff[1]。 - 底层 (plumbing)
-
核心 Git 的可爱名称。
- 上层 (porcelain)
- 每个工作树的引用 (per-worktree ref)
-
每个工作树的引用,而不是全局的。 目前只有 HEAD 和任何以
refs/bisect/
开头的引用,但以后可能会包括其他不常见的引用。 - 伪引用 (pseudoref)
-
具有与普通引用不同语义的引用。 这些引用可以通过普通的 Git 命令读取,但不能通过诸如 git-update-ref[1] 之类的命令写入。
Git 知道以下伪引用
-
FETCH_HEAD
由 git-fetch[1] 或 git-pull[1] 写入。 它可能引用多个对象 ID。 每个对象 ID 都用元数据进行注释,指示它从何处获取及其获取状态。 -
MERGE_HEAD
由 git-merge[1] 在解决合并冲突时写入。 它包含所有正在合并的提交 ID。
-
- 拉取 (pull)
-
拉取分支意味着抓取它并合并它。 另请参阅 git-pull[1]。
- 推送 (push)
-
推送分支意味着从远程仓库获取分支的头引用,确定它是否是该分支本地头引用的祖先,如果是,则将所有可达自本地头引用且远程仓库中缺失的对象放入远程对象数据库,并更新远程头引用。 如果远程头不是本地头的祖先,则推送失败。
- 可达 (reachable)
-
给定提交的所有祖先都称为从该提交“可达”。 更一般地说,如果我们可以通过一个链从一个对象到达另一个对象,该链遵循标签到它们标记的任何内容,提交到它们的父对象或树,以及树到它们包含的树或blob,则一个对象可以从另一个对象到达。
- 可达性位图 (reachability bitmaps)
-
可达性位图存储有关包文件或多包索引 (MIDX) 中选定的一组提交的可达性的信息,以加快对象搜索速度。 位图存储在“.bitmap”文件中。 一个仓库最多可以使用一个位图文件。 该位图文件可能属于一个包或仓库的多包索引(如果存在)。
- 变基 (rebase)
- 引用 (ref)
-
指向对象名称或另一个引用的名称(后者称为符号引用)。 为了方便起见,当用作 Git 命令的参数时,有时可以缩写引用; 有关详细信息,请参见 gitrevisions[7]。 引用存储在仓库中。
引用命名空间是分层的。 引用名称必须以
refs/
开头或位于层次结构的根目录中。 对于后者,它们的名称必须遵循以下规则-
该名称仅由大写字符或下划线组成。
-
该名称以“
_HEAD
”结尾或等于“HEAD
”。在层次结构的根目录中存在一些不规则的引用,它们不符合这些规则。 以下列表是详尽的,将来不应扩展
-
AUTO_MERGE(自动合并)
-
BISECT_EXPECTED_REV(二分查找预期版本)
-
NOTES_MERGE_PARTIAL(笔记部分合并)
-
NOTES_MERGE_REF(笔记合并引用)
-
MERGE_AUTOSTASH(合并自动储藏)
不同的子层级用于不同的目的。例如,
refs/heads/
层级用于表示本地分支,而refs/tags/
层级用于表示本地标签。
-
- reflog(引用日志)
-
引用日志显示了引用的本地“历史”。换句话说,它可以告诉你这个仓库中倒数第三个版本是什么,以及昨天晚上 9:14 这个仓库的当前状态。详情请参阅 git-reflog[1]。
- refspec(引用规格)
-
“引用规格”被 fetch 和 push 用于描述远程 引用和本地引用之间的映射。详情请参阅 git-fetch[1] 或 git-push[1]。
- remote repository(远程仓库)
- remote-tracking branch(远程跟踪分支)
-
一个 引用,用于跟踪来自另一个 仓库 的更改。它通常看起来像refs/remotes/foo/bar(表示它跟踪名为bar的远程分支foo),并与配置的fetch refspec的右侧匹配。远程跟踪分支不应包含直接修改或本地提交。
- repository(仓库)
-
引用的集合,以及包含从引用可达的所有对象的对象数据库,可能还附带一个或多个 瓷器 的元数据。 仓库可以通过 备用对象数据库机制与其他仓库共享对象数据库。
- resolve(解决)
-
手动修复失败的自动 合并 遗留的问题的操作。
- revision(版本)
-
提交(名词)的同义词。
- rewind(回退)
- SCM
-
源代码管理(工具)。
- SHA-1
-
“安全哈希算法 1”;一种加密哈希函数。 在 Git 的上下文中,用作 对象名称 的同义词。
- shallow clone(浅克隆)
-
主要是 浅仓库 的同义词,但该短语更明确地表明它是通过运行
git clone --depth=...
命令创建的。 - shallow repository(浅仓库)
-
浅仓库具有不完整的历史记录,其某些提交已将父级烧掉(换句话说,Git被告知假装这些提交没有父级,即使它们记录在提交对象中)。 当您只对项目的近期历史感兴趣时,这有时很有用,即使上游记录的真实历史记录要大得多。 浅仓库是通过将
--depth
选项提供给 git-clone[1] 来创建的,并且其历史记录稍后可以使用 git-fetch[1] 加深。 - stash entry(储藏条目)
- submodule(子模块)
- superproject(超级项目)
- symref(符号引用)
-
符号引用:它不是包含 SHA-1 ID 本身,而是采用 ref: refs/some/thing 格式,并且在被引用时,它会递归地解引用 到此引用。HEAD是符号引用的一个主要示例。符号引用使用 git-symbolic-ref[1] 命令进行操作。
- tag(标签)
-
refs/tags/
命名空间下的 引用,它指向任意类型的对象(通常标签指向 标签 或 提交对象)。与 HEAD 相比,标签不会被commit
命令更新。Git 标签与 Lisp 标签无关(在 Git 的上下文中,Lisp 标签将被称为 对象类型)。标签最常用于标记提交祖先链中的特定点。 - tag object(标签对象)
-
一个 对象,包含一个指向另一个对象的 引用,该对象可以像 提交对象 一样包含消息。 它还可以包含(PGP)签名,在这种情况下,它被称为“签名标签对象”。
- topic branch(主题分支)
-
一个常规的 Git 分支,开发人员使用它来标识概念上的开发线。由于分支非常容易且成本低廉,因此通常希望拥有几个小分支,每个分支都包含定义明确的概念或小的增量但相关的更改。
- trailer(尾部)
-
键值元数据。尾部可选地位于提交消息的末尾。在其他社区中可能称为“页脚”或“标签”。请参阅 git-interpret-trailers[1]。
- tree(树)
- tree object(树对象)
- tree-ish(也称为 treeish)
-
一个 树对象 或一个可以递归 解引用 到树对象的 对象。 解引用 提交对象 会产生与 版本 的顶部 目录 相对应的树对象。 以下都是 tree-ish:commit-ish、树对象、指向树对象的 标签对象、指向指向树对象的标签对象的标签对象等等。
- unborn(未出生)
-
HEAD 可以指向一个尚不存在且尚未在其上进行任何提交的分支,这样的分支称为未出生的分支。 用户遇到未出生分支的最典型方式是全新创建一个仓库,而不是从其他地方克隆。 HEAD 将指向尚未出生的main(或master,具体取决于您的配置)分支。 此外,某些操作可以使用它们的 孤立 选项将您置于未出生分支上。
- unmerged index(未合并索引)
- unreachable object(不可达对象)
- upstream branch(上游分支)
-
合并到有问题的分支(或将有问题的分支变基到)的默认 分支。 它通过 branch.<name>.remote 和 branch.<name>.merge 进行配置。 如果 A 的上游分支是 origin/B,有时我们会说“A 正在跟踪 origin/B”。
- working tree(工作树)
-
实际检出的文件的树。 工作树通常包含 HEAD 提交树的内容,以及您已进行但尚未提交的任何本地更改。
- worktree(工作区)
-
一个仓库可以附加零个(即裸仓库)或一个或多个工作区。 一个“工作区”由一个“工作树”和仓库元数据组成,其中大部分在单个仓库的其他工作区之间共享,其中一些是按工作区单独维护的(例如,索引、HEAD 和伪引用,如 MERGE_HEAD、每个工作区的引用和每个工作区的配置文件)。
GIT
git[1] 套件的一部分