Git 交互式变基

预计阅读时间1 分 302 views

Git 变基(Rebase)是一种将一个分支上的一系列提交重新应用到另一个分支上的操作。通过变基,开发者可以清理和整理历史,使提交历史更加线性和清晰。

什么是变基?

举个通俗的例子,假设你有两个分支:main 和 featurefeature 分支基于 main 分支创建,并且你在 feature 分支上做了一些提交。与此同时,main 分支上也有新的提交。

main:    A---B---C
               \
feature:        D---E---F

在上面的例子中:

  • ABC 是 main 分支上的提交。
  • DEF 是 feature 分支上的提交。

现在,你想把 feature 分支的更改合并到 main 分支中。但是,你希望提交历史看起来更“线性”,就像是 feature 分支上的更改是直接基于 main 分支上的最新提交 C 之上的。

这时,可以使用变基操作:

git checkout feature
git rebase main

变基操作会做以下事情:

  1. 找到共同的祖先:Git 找到 feature 和 main 分支的共同祖先提交(在这个例子中是 B)。
  2. 存储当前分支的更改:Git 暂时存储 feature 分支上的提交 DEF
  3. 移动分支指针:Git 将 feature 分支指针移动到 main 分支的最新提交 C
  4. 逐个应用更改:Git 将 DEF 逐个应用到 C 之上。

变基后的提交历史看起来像这样:

main:    A---B---C
                   \
feature:            D'---E'---F'
  • D'E'F' 是新的提交,它们的内容与 DEF 相同,但现在是基于 C 之上的。

这样,feature 分支上的提交历史变得更加线性,看起来像是 DEF 是直接基于 C 开发的。

使用场景

  1. 清理历史:当你想要一个干净、线性的提交历史时,可以使用变基。例如,当你在一个特性分支上工作,想要将这个分支的更改合并到主分支上,但又不想在主分支上增加额外的合并提交。
  2. 准备代码提交:在将你的代码推送到远程仓库之前,你可能想要通过变基来清理你的提交记录,使其更加清晰。
  3. 团队协作:在团队协作中,变基可以避免不必要的合并提交,保持项目的提交历史整洁。

交互式变基

交互式变基(Interactive Rebase)是变基的一种强大模式,允许你在变基过程中对每个提交进行编辑、重排、合并或删除。

基本操作步骤

1、启动交互式变基

git rebase -i <共同祖先的哈希值> feature

例如,假设你在 feature 分支上,想要将其变基到 main 分支:

git rebase -i main

2、编辑提交列表

这会打开一个文本编辑器,显示当前分支相对于目标分支的所有提交。你可以在这里对提交进行操作:

pick f1e2d3c 添加功能 A
pick a3b4c5d 修复 bug
pick b6c7d8e 更新文档

你可以将 pick 改为以下命令:

  • reword:修改提交信息
  • edit:停下来允许你修改提交内容
  • squash:将该提交与前一个提交合并
  • fixup:类似 squash,但会丢弃该提交的提交信息

3、保存并退出 编辑完成后,保存并退出编辑器。Git 会按顺序应用这些修改。

4、解决冲突 如果在应用提交时遇到冲突,Git 会暂停并允许你手动解决冲突。解决冲突后,使用以下命令继续变基:

git add <解决冲突的文件>
git rebase --continue

如果你想中止变基,可以使用:

git rebase --abort

5、完成变基 一旦所有提交都被成功应用,变基过程就完成了。你的提交历史现在已经被整理得更加清晰和线性。

    注意事项

    • 不要对已推送到远程仓库的分支进行变基:变基会重写历史,这可能会导致其他开发者的工作出现问题。
    • 变基是不可逆的:一旦执行了变基操作,原始的提交历史就会被覆盖,除非有备份。
    • 谨慎使用变基:变基是一个强大的工具,但也需要谨慎使用。正确使用变基可以极大地提高代码管理的效率和清晰度。

    通过交互式变基,你可以更好地管理你的提交历史,确保代码库的整洁。

    分享此文档

    Git 交互式变基

    或复制链接

    本页目录