了解 Git 历史

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Git 将历史记录存储为整个存储库的快照图(称为提交)。 每个提交还包含指向一个或多个先前提交的指针。 提交可以有多个父项,并创建类似于图形而不是直线的历史记录。 此历史记录差异非常重要,也是用户发现 Git 令人困惑的主要原因。

注意

如果在 Git 历史记录中找不到自己所做的已知更改,请在 Git 丢失我的更改:查看 Git 的历史记录简化中详细了解 Git 历史记录简化的工作原理。

提交历史记录基础知识

从简单的历史记录示例开始:一个包含 3 个线性提交的存储库。

一行中的三个提交

提交 A 是提交 B 的父级,提交 B 是提交 C 的父级。此历史记录看起来与 CVCS 非常相似。 指向提交 C 的箭头是一个分支。 它被命名为 main,因为这是 Git 存储库中主线分支的默认名称。 分支是指向特定提交的指针,这就是分支在 Git 中如此轻量级和简单的原因。

与 CVCS 相比,Git 的一个主要区别是拥有自己的存储库的完整副本。 我需要通过从远程存储库获取最新提交,使本地存储库与远程存储库保持同步。 为此,我将使用以下命令拉取主分支:

git pull origin main

这会将远程存储库的 main 分支(默认称为 origin)中的所有提交复制(“拉取”)到本地存储库的 main 分支。 拉取操作复制了一个新提交,本地存储库中的 main 分支现在指向该新提交。

将第四个提交 D 添加到行

了解分支历史记录

现在,我想对代码进行更改。 拥有多个活动分支是很常见的,可以在其中并行处理不同的功能。 这与 CVCS 形成鲜明对比,CVCS 新分支繁多且很少创建。 第一步是使用以下命令签出到新分支:

git checkout -b cool-new-feature

下面是结合了两个命令的快捷方式:用于创建分支的 git branch cool-new-feature,后跟用于开始在分支中工作的 git checkout cool-new-feature

添加了分支 cool-new-feature

两个分支现在指向同一个提交。 我将在两个新提交 E 和 F 中对 cool-new-feature 分支进行一些更改。

添加了两个新提交

我的提交可通过 cool-new-feature 分支访问,因为我在该分支中创建了这些提交。 我完成了我的功能,并想要将其合并到 main 中。 为此,我将使用以下命令:

git merge cool-feature main

合并后

合并时,历史记录的图形结构变为可见。 当我将我的分支合并到另一个分支时,Git 将创建新提交。 这是合并提交。 由于没有冲突,因此此合并提交中不包含任何更改。 如果存在冲突,合并提交将包括解决这些冲突所需的更改。

现实世界中的历史记录

下面是更类似于团队中积极开发的代码的 Git 历史记录示例。 三人大约在同一时间将他们自己分支中的提交合并到主分支。

git 图表的控制台日志

现在,你了解了分支和合并如何创建图形的形状,这应该不会太可怕!