重写历史

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

欢迎你,时间旅行的 Git 探险家!你被赋予了一项重要的任务:清理一个高度机密项目的混乱提交历史。你的目标是利用你新获得的 Git 能力,特别是交互式变基(interactive rebasing)的艺术,将一个混乱的时间线转化为清晰、简洁的历史。

想象一下,你是一位有能力改写历史的历史学家。你的工作是将一系列分散的事件重新组织成一个连贯的叙述。这正是你将使用 Git 的交互式变基功能所做的事情。你将合并相关的提交,删除不必要的提交,并重写提交信息,以更清晰地讲述你的项目开发的故事。

你准备好潜入时间流,并带着一个经过润色的 Git 历史出现吗?让我们开始你的时间冒险吧!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/log("Show Commits") git/BranchManagementGroup -.-> git/rebase("Reapply Commits") subgraph Lab Skills git/commit -.-> lab-387746{{"重写历史"}} git/log -.-> lab-387746{{"重写历史"}} git/rebase -.-> lab-387746{{"重写历史"}} end

清理时间线

任务

挑战(Challenge)仓库已在 ~/project/time-travel-git 中设置好。运行以下命令以查看初始提交历史:

cd ~/project/time-travel-git
git log --oneline

你应该看到以下 4 个提交(你的提交哈希值会不同):

886c6ad (HEAD -> master) Add project description
3a87b84 Add project codename
6b4cbb9 Fix typo in project name
0d71e5e Start secret project

你的任务包括以下几项:

  1. 将最旧的两个提交("Start secret project" 和 "Fix typo in project name")合并为一个提交,消息为 "Initialize secret project"。
  2. 将 "Add project codename" 提交的信息修改为 "Add project codename: Chronos"。
  3. 保持最新的提交("Add project description")不变。

要求

要成功完成此任务,请遵守以下要求:

  • 所有操作必须在 ~/project/time-travel-git 目录中执行。
  • 你必须使用 git rebase -i(交互式变基)命令来清理提交历史。
  • 你的最终历史记录应恰好有 3 个提交(而不是原来的 4 个)。
  • 文件的内容应保持不变——你只需修改提交历史。
  • 当挑战(Challenge)完成时,运行 git log --oneline 应该显示 3 个具有正确消息的提交。

提示

以下是一些有用的提示,可指导你完成挑战(Challenge):

  1. 交互式变基允许你操作历史记录中的提交。基本命令格式为:

    git rebase -i <commit>

    其中 <commit> 是你要修改的第一个提交之前的提交。要从第一个提交开始修改,你可以使用:

    git rebase -i --root
  2. 在交互式变基屏幕中,你将看到一个带有操作的提交列表。常见的操作是:

    • pick - 按原样使用提交
    • rewordr - 使用提交但更改其消息
    • squashs - 将此提交与前一个提交合并
    • fixupf - 类似于 squash,但放弃此提交的消息
  3. 要合并提交,你可能需要在第二个提交上使用 squashfixup

  4. 要更改提交消息,请使用 reword 操作。

  5. 设置好你的变基计划后,保存并关闭编辑器。Git 将指导你完成其余过程,根据需要打开新的编辑器窗口以编辑提交消息。

  6. 如果你在变基过程中犯了错误,你可以随时使用以下命令中止它:

    git rebase --abort

    然后重新开始。

示例

完成挑战(Challenge)后,你的 git log --oneline 应该类似于这样(具有不同的提交哈希值):

abc1234 Add project description
def5678 Add project codename: Chronos
ghi9101 Initialize secret project
✨ 查看解决方案并练习

总结

在这个挑战(Challenge)中,你已经开始了一段穿越 Git 历史的时间弯曲之旅。你已经掌握了交互式变基(interactive rebasing)的艺术,这是一种强大的工具,可以让你重塑过去,并创建一个更清晰、更合乎逻辑的提交历史。

通过合并提交、修改消息和重新组织更改,你已经将一系列混乱的事件转化为一个连贯的叙述。这项技能在现实世界的项目中非常宝贵,在这些项目中,维护一个干净且易于理解的历史可以大大改善协作和项目管理。

请记住,能力越大,责任越大。虽然重写历史对于本地分支或个人项目可能很有用,但在共享分支上应谨慎使用。在修改共享历史之前,务必与你的团队沟通。

当你继续你的 Git 冒险时,请继续磨练这些技能。操纵历史的能力不仅仅是整理,而是要清晰地讲述你的项目演变的故事。愿你未来的 Git 历史是干净的,你的合并没有冲突,你的提交始终有意义!