0Pricing
Git & GitHub Professional Workflow · 课时

变基与合并对比

比较变基和合并,了解何时使用各自的方式来保持整洁、线性的历史记录。

变基与合并对比 是 CoddyKit 上的免费 Git & GitHub Professional Workflow 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Git & GitHub Professional Workflow 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Git & GitHub Professional Workflow 课程共包含 4 节课。

合并还是变基?如何选择

使用 Git 时,您经常会发现自己的分支与另一个分支出现分叉,例如您的 feature 分支与 main 分支之间。

如何将这些更改合并到一起?Git 提供了两种主要策略:合并和变基。两者都可以实现集成,但方式存在根本差异,因此会产生不同的项目历史。

合并:组合历史

合并是 Git 默认的更改集成方式。将一个分支合并到另一个分支时,Git 会获取源分支的内容,并将其与目标分支组合起来。

合并的关键特征是会创建一个新的合并提交。此提交有两个父提交,明确显示出两个分叉的历史被合并到了一起,同时保留两个分支的完整历史。

执行 Git 合并

让我们来看一个简单的合并示例。我们将创建一个 feature 分支,添加一次提交,然后将其合并回 main。

git init my_merge_project
cd my_merge_project
echo "Initial content" > file.txt
git add .
git commit -m "Initial commit"

git branch feature
git checkout feature
echo "Feature A" >> feature.txt
git add .
git commit -m "Add feature A"

git checkout main
echo "Main update" >> main.txt
git add .
git commit -m "Update main"

git merge feature

git log --oneline --graph

合并:优点与缺点

合并操作简单,并且对共享分支来说很安全,但可能会导致历史记录显得“杂乱”。

  • 优点:
  • 保留提交的完整历史。
  • 不会破坏现有提交,也不会重写它们。
  • 简单易用、易于理解。
  • 缺点:
  • 可能产生包含大量合并提交的“嘈杂”历史。
  • 多个分支合并进来时,图表可能显得很复杂。

变基:重写历史

变基是合并之外的另一种选择,它通过将一系列提交移动或组合到新的基提交上来集成更改。它不会创建合并提交,而是重写项目历史。

本质上,功能分支中的提交会被“重新应用”到目标分支的最新提交之上,使其看起来仿佛您是从那里开始工作的。这样可以创建一条线性历史,并避免额外的合并提交。

执行 Git 变基

现在,让我们使用变基尝试相同的场景。我们将把 feature 分支变基到 main 上。

请注意,feature 分支的提交会被重新应用到 main 的最新提交之上,然后通过快进合并使 main 指向该提交。

git init my_rebase_project
cd my_rebase_project
echo "Initial content" > file.txt
git add .
git commit -m "Initial commit"

git branch feature
git checkout feature
echo "Feature B" >> feature.txt
git add .
git commit -m "Add feature B"

git checkout main
echo "Main update 2" >> main.txt
git add .
git commit -m "Update main 2"

git checkout feature
git rebase main

git checkout main
git merge feature

git log --oneline --graph

变基:优点与缺点

变基可以创建整洁的历史,但对于共享分支,有一个重要的注意事项。

  • 优点:
  • 创建整洁的线性项目历史。
  • 更易于浏览和理解提交历史。
  • 集成前可以整理提交(压缩、重新排序)。
  • 缺点:
  • 会重写提交历史。
  • 如果用于已推送到共享(公共)远程仓库的提交,可能会带来风险。

合并与变基:对比

下面快速总结两者的核心区别:

  • 合并:
  • 创建新的合并提交。
  • 保留完整且准确的历史。
  • 不会破坏原有内容。
  • 图表可能较为复杂。
  • 变基:
  • 重写历史,不创建合并提交。
  • 生成线性历史。
  • 具有破坏性(会改变提交标识)。
  • 图表非常整洁。

选择您的策略

那么,什么时候应该使用哪一种方式?

  • 在以下情况下使用合并:
  • 处理公共或共享分支时(例如 main、develop)。
  • 需要保留项目的完整历史时。
  • 希望明确显示分叉的历史何时被合并时。
  • 在以下情况下使用变基:
  • 推送前处理自己的私有功能分支时。
  • 希望获得整洁的线性历史时。
  • 集成前希望整理功能分支中的提交(例如压缩、重新排序)时。

黄金法则:绝不要对已经推送到共享远程仓库的提交进行变基!对共享历史进行变基可能会给协作者带来严重困扰。

快速检查:合并还是变基?

请思考 Git 的两种主要集成策略各自的特点。

回顾:合并与变基

在本课中,我们探讨了 Git 集成更改的两种基本方式:合并和变基。

  • 合并通过新的合并提交组合历史,并保留所有原始提交。
  • 变基通过移动提交来重写历史,创建线性的开发流程。

请根据团队的工作流谨慎选择,并记住黄金法则:绝不要对公共历史进行变基!理解这一点对于维护整洁且便于协作的 Git 工作流至关重要。

常见问题解答

「变基与合并对比」课时是免费的吗?

是的 — 「变基与合并对比」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Git & GitHub Professional Workflow 课程的其余内容,请升级到 CoddyKit PRO。 Git & GitHub Professional Workflow 课程共包含 4 节课。

「变基与合并对比」这节课中我会学到什么?

比较变基和合并,了解何时使用各自的方式来保持整洁、线性的历史记录。 你通过在浏览器中直接运行的动手代码来练习 Git & GitHub Professional Workflow,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Git & GitHub Professional Workflow 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Git & GitHub Professional Workflow 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「变基与合并对比」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Git & GitHub Professional Workflow 课中编写并运行代码吗?

能。每节 Git & GitHub Professional Workflow 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 功能分支工作流
  2. Gitflow 工作流简介
  3. 变基与合并对比
  4. 主干开发
← 返回 Git & GitHub Professional Workflow