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。 此拉取带来了一个新提交,本地存储库中的主分支将移动到该提交。
了解分支历史
现在是时候更改代码了。 在并行处理不同功能时,通常有多个活动分支。 这与 CVCS 形成鲜明对比,新分支通常较复杂且很少被创建。 第一步是使用以下命令切换到新分支:
git checkout -b cool-new-feature
这是组合两个命令的快捷方式:
-
git branch cool-new-feature创建分支 -
git checkout cool-new-feature以开始在分支中工作
现在,两个分支指向相同的提交。 假设在两个新提交(E 和 F)中,分支上有 cool-new-feature 一些更改。
提交是由 cool-new-feature 分支可达的,因为它们已提交到该分支。
完成该功能后,需要将其合并到主分支中。 为此,请使用以下命令:
git merge cool-new-feature main
当合并时,历史记录的图形结构变得可见。 Git 在分支合并到另一个分支时创建新的提交记录。 这是合并提交。 由于没有冲突,此次合并提交未包含任何更改。 如果存在冲突,合并提交将包括解决冲突所需的更改。
现实世界中的历史
下面是 Git 历史记录的一个示例,该历史记录更类似于团队中活动开发中的代码。
有三个人在同一时间将自己的分支中的提交合并到 main 分支中。
后续步骤
详细了解如何在 GitHub 和 Azure Repos 或 Git 日志历史记录简化中使用 Git 历史记录。