跳至主要内容

如何使用 Git Rebase:初学者教程

了解什么是 Git Rebase,以及如何在您的数据科学工作流中使用它。
· 8分钟 阅读

使用 AI 探索

随着数据科学、数据工程和机器学习几乎渗透到企业日常运营的方方面面,数据专业人士已无法再“单打独斗”。相反,数据从业者必须与软件开发人员紧密合作,使数据科学项目真正落地并具备可扩展性。这也意味着数据专业人士需要将面向软件开发的新工具(包括 Git)纳入技能体系。

Git 是一款开源的版本控制工具,用于执行版本控制操作。它使开发者和数据专业人士能够高效跟踪项目文件(如 Python 脚本和数据集)的变更,让项目成员掌握所有更改的记录、同步任务,并在不丢失信息的情况下开展协作。开始学习 git 的绝佳入口是我们的Introduction to Git 课程。

Git 的一项关键特性是可以使用分支。分支让开发者可以维护项目的多个版本,并对每个版本进行系统化跟踪。在某个时间点,您可能需要把某个分支的进展合入另一个分支。合并分支有多种策略,包括 git merge 和 git rebase 命令。

本文旨在介绍 git rebase,这是一条通过将源分支的一系列提交移动到目标分支(通常是主分支)之上来帮助整合分支的命令。

理解 Git Rebase

设想您与其他数据专业人士共同开展一个数据科学项目,而您负责基于先前提交收集的数据开发一个PowerBI 仪表板。

既然您是该仪表板的主要负责人,那么创建一个专用分支就很合理。与此同时,团队的其他成员可以继续在主分支上提交新的更改。情形如下所示:

为新功能创建分支

图 1。来源

现在设想主分支上的最新提交与您的分支密切相关。比如,他们可能新增了可丰富您仪表板的数据集。在这种情况下,您需要把这些新提交并入自己的分支。有两种整合方式:合并或变基。

如果使用 git merge 命令合并分支,您会在自己的分支上创建一个新的合并提交,将主分支上的最新更改与您分支上的更改融合在一起。

合并分支。

图 2。来源

git merge 是一种非破坏性操作,意味着两个分支的历史都不会改变。这有利于可追溯性,但也会增加分支的复杂度,尤其当主分支活跃时,您可能需要不断引入主分支中的额外提交。正如这篇关于解决合并冲突的博客所解释的,这也可能导致潜在的合并冲突。

另一方面,如果使用 git rebase,您会把整个分支移动到主分支之上。该操作会重写项目历史,为您分支中的每个提交插入新的提交。得到的分支如下所示:

变基分支

图 3。来源

git rebase 是保持项目清晰有序的绝佳选择。通过将整个功能分支移动到主分支最新位置,项目历史会发生变化,变为更易于导航的完全线性历史。与 git merge 相比,git rebase 也省去了额外的合并提交。

不过,git rebase 也存在潜在的冲突和陷阱。由于它会更改提交历史且无需合并提交,因此有时难以辨别变基引入的更改何时被纳入,从而影响可追溯性。更重要的是,如果 git 操作有意或无意地更改了主分支,并将这些更改推送到远程仓库,就可能导致意外变更,与其他开发者的工作产生冲突。因此,您应谨慎使用 git rebase,并仅在特定情形下采用。

现在让我们看看 git rebase 在实践中的用法!

执行 Git Rebase

为演示 git rebase 的工作方式,我们将复现实例部分描述的情境。如果您在协作项目中工作,首先需要从托管项目的远程仓库(通常在云端或远程服务器)获取并下载内容,并用最新更新同步本地仓库,以便与团队保持一致。可以在终端中使用 git pull 命令完成:

git pull

现在,您可以创建一个新分支来开发 PowerBI 仪表板。使用以下命令即可:

git checkout -b powerbi_dashboard

创建新分支后,您开始工作并通过多次提交记录进展。例如,在整理将展示于仪表板中的图表后,进行一次新的提交。

git add .  
git commit -m "powerbi_dashboard/add_plots"

与此同时,您的同事在主分支上做出了与仪表板项目相关的新进展。再次强调,您需要先运行 git pull,从远程仓库获取更新并复制到本地仓库。这样就会形成图 1 所示的情形。

从这里开始,您可以选择 git merge 或 git rebase。如果选择后者,您只需运行 git rebase,将自己的分支移动到主分支之上。

git checkout -b powerbi_dashboard
git rebase main 

交互式变基

如果不提供额外信息,git rebase 会将您分支中的所有提交转移到主分支的最新位置。不过,如果您希望对提交的移动方式有更多控制,可以使用交互模式。这可以让您在把分支移动到主分支之前清理提交历史,从而提升清晰度。

要启动交互式变基,请在 git rebase 命令中加入 i 选项:

git checkout -b powerbi_dashboard
git rebase -i main

这会打开一个编辑器,您可以针对每个要变基的提交调整 git 的行为。可用选项包括修改提交消息、合并提交以及删除提交。完整列表可参见 git 的文档。下面是编辑器的大致样式:

pick 46s9451 powerbi_dashboard/add_plots #keep commit
reword 94561f6 powerbi_dashboard/set_data_connectors #edit commit message
drop 1f094y8 powerbi_dashboard/minor_changes #remove commit

Git Rebase 最佳实践

git rebase 很有用,但在错误场景下使用可能导致令人困惑的情况。经验法则是,只在本地仓库中使用 git rebase。

尤其当您在专用分支上开发某个特定功能时,git rebase 会非常顺手。在这种场景下,git rebase 可用于保持提交历史干净且线性,从而在您将提交推送到远程仓库时,让其他开发者更容易理解您的进展。

然而,在变基流程中您可能会遇到合并冲突,尤其当您长时间没有合入同事在主分支上的提交时。

当您的分支与主分支的最新提交发生冲突时,可以通过频繁针对主分支进行变基来缓解。这样,您就能确保始终与团队保持一致。

最后,预防胜于治疗。因此,在考虑使用 git rebase 之前,请先与团队沟通,让他们为您提供如何以及在何处使用它的指导。

结语

您已读到本教程的结尾,恭喜!git rebase 值得纳入您的 git 工作流。但关于 Git 还有更多值得学习的内容,它是开发者和数据从业者的必备工具。

下面是一些 DataCamp 资源,帮助您进一步掌握 Git。祝您学习愉快!

Javier Canales Luna

作者

Javier Canales Luna

我是一名自由职业的数据分析师,与全球各地的公司和组织合作开展数据科学项目。我也担任数据科学讲师,拥有2年以上授课经验。我经常用英语和西班牙语撰写与数据科学相关的文章,其中一些已发表在 DataCamp、Towards Data Science 和 Analytics Vidhya 等知名网站上。作为一名具有政治学与法律背景的数据科学家,我的目标是在公共政策、法律与技术的交汇处开展工作,借助思想的力量推动创新解决方案与叙事,帮助我们应对紧迫挑战,尤其是气候危机。我认为自己是自学成才、不断进步的人,坚定支持跨学科合作。学习新事物永远不嫌晚。

主题