介绍
欢迎你,穿梭时空的 Git 探险家!你被赋予了一项重要任务:清理一个绝密项目混乱的提交历史。你的目标是利用新掌握的 Git 超能力,特别是交互式变基(Interactive Rebase)的艺术,将混乱的时间线转化为清晰、简洁的历史记录。
想象你是一位拥有重写过去能力的史学家。你的工作是提取一系列零散的事件,并将它们重新组织成一个连贯的故事。这正是你将通过 Git 的交互式变基功能所做的事情。你将合并相关的提交、删除不必要的提交,并重写提交信息,从而为你的项目开发历程提供一个更清晰的叙述。
准备好潜入时间流,带回一份完美的 Git 历史记录了吗?让我们开始这场时空冒险吧!
清理时间线
任务
挑战仓库已在 ~/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
你的任务包括以下内容:
- 将最早的两个提交(「Start secret project」和「Fix typo in project name」)合并为一个提交,提交信息改为「Initialize secret project」。
- 将「Add project codename」提交的信息修改为「Add project codename: Chronos」。
- 保持最新的提交(「Add project description」)不变。
要求
为了成功完成此任务,请遵守以下要求:
- 所有操作必须在
~/project/time-travel-git目录下执行。 - 你必须使用
git rebase -i(交互式变基)命令来清理提交历史。 - 最终的历史记录应恰好包含 3 个提交(而不是原始的 4 个)。
- 文件内容应保持不变——你只需修改提交历史。
- 挑战完成后,运行
git log --oneline应显示具有正确信息的 3 个提交。
提示
以下是一些引导你完成挑战的有用提示:
交互式变基允许你操作历史记录中的提交。基本命令格式为:
git rebase -i <commit>其中
<commit>是你想要修改的第一个提交之前的那个提交。要从最开始的提交进行修改,可以使用:git rebase -i --root在交互式变基界面中,你会看到提交列表及其对应的操作。常见的操作有:
pick—— 原样使用提交reword或r—— 使用提交但修改其提交信息squash或s—— 将此提交与前一个提交合并fixup或f—— 类似于 squash,但丢弃此提交的信息
要合并提交,你可能需要对第二个提交使用
squash或fixup。要更改提交信息,请使用
reword操作。设置好变基计划后,保存并关闭编辑器。Git 将引导你完成剩余过程,并根据需要打开新的编辑器窗口以编辑提交信息。
如果在变基过程中出错,你可以随时通过以下命令中止:
git rebase --abort然后重新开始。
示例
完成挑战后,你的 git log --oneline 应该类似于这样(提交哈希值会有所不同):
abc1234 Add project description
def5678 Add project codename: Chronos
ghi9101 Initialize secret project
总结
在这次挑战中,你开启了一段穿梭 Git 历史的时空之旅。你掌握了交互式变基的艺术,这是一个强大的工具,允许你重塑过去并创建一个更整洁、更符合逻辑的提交历史。
通过合并提交、重写信息和重新组织变更,你将一系列混乱的事件转化为了连贯的叙述。这项技能在现实世界的项目中弥足珍贵,维护整洁且易于理解的历史记录可以极大地改善协作和项目管理。
请记住,能力越大,责任越大。虽然重写历史对于本地分支或个人项目非常有用,但在共享分支上应谨慎使用。在修改共享历史之前,务必与你的团队沟通。
在你继续 Git 冒险的过程中,请不断磨练这些技能。操作历史的能力不仅仅是为了整洁,更是为了精心打造项目演进的清晰故事。愿你未来的 Git 历史整洁有序,合并过程毫无冲突,提交信息永远富有意义!



