了解 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

现在,两个分支指向同一个提交。 假设分支中有 cool-new-feature 两个新提交(E 和 F)中的一些更改。

将提交添加到分支

提交由 cool-new-feature 分支访问,因为它们已提交到该分支。 完成该功能后,需要将其合并到主分支中。 为此,请使用以下命令:

git merge cool-feature main

合并分支

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

现实世界中的历史

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

git graph 的控制台日志

后续步骤

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