了解 Git 历史记录

Git 以与集中版本控制系统(CVCS)(如 Team Foundation 版本控制、Perforce 或 Subversion)基本不同的方式表示历史记录。 集中式系统存储存储库中每个文件的单独历史记录。 Git 将历史记录存储为整个存储库的快照图。 这些快照(称为 Git 中的 提交 )可以有多个父级,从而创建类似于图形而不是直线的历史记录。 这一历史差异非常重要,是熟悉 CVCS 的用户发现 Git 令人困惑的主要原因。

提交历史记录基础知识

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

一行中的三个提交

提交 A 是提交 B 的父级,提交 B 是提交 C 的父级。此历史记录看起来与 CVCS 非常相似。 指向提交 C 的箭头是分支。 分支是指向特定提交的指针,这就是为什么分支在 Git 中如此轻量级且容易。

与 CVCS 相比,Git 中的一个关键区别在于开发人员有自己的存储库完整副本。 他们需要从远程存储库获取最新提交,使本地存储库与远程存储库保持同步。 为此,请使用以下命令拉取主分支:

git pull origin main

这会合并远程存储库中主分支的所有更改,Git 默认将其命名为 origin。 此拉取带来了一个新提交,本地存储库中的主分支将移动到该提交。

第四个提交 D 添加到行

了解分支历史

现在是时候更改代码了。 在并行处理不同功能时,通常有多个活动分支。 这与 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 分支可达的,因为它们已提交到该分支。 完成该功能后,需要将其合并到主分支中。 为此,请使用以下命令:

git merge cool-new-feature main

合并分支

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

现实世界中的历史

下面是 Git 历史记录的一个示例,该历史记录更类似于团队中活动开发中的代码。 有三个人在同一时间将自己的分支中的提交合并到 main 分支中。

git graph 的控制台日志

后续步骤

详细了解如何在 GitHubAzure ReposGit 日志历史记录简化中使用 Git 历史记录