使用交互式变基整理历史
使用交互式变基重写提交历史,在推送前合并提交、调整顺序或编辑提交信息。
使用交互式变基整理历史 是 CoddyKit 上的免费 Git & GitHub Professional Workflow 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Git & GitHub Professional Workflow 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Git & GitHub Professional Workflow 课程共包含 4 节课。
认识交互式变基
欢迎了解 Git 的强大工具:交互式变基!它允许您在与他人共享项目之前重写项目的提交历史。
您可以把它想象成提交记录的时光机:通过清理、合并或重新排序更改,构建一条清晰、线性的工作历程。
为什么要清理历史记录
为什么要重写历史记录呢?
- 清晰性:让项目的提交日志更易于阅读和理解。
- 简洁性:将多个细小的增量提交合并为一个有意义的更改。
- 调试:使用
git bisect等工具查找错误引入位置时,清晰的历史记录会很有帮助。 - 更好的拉取请求:向协作者展示经过整理的更改集合。
开始交互式变基
要开始交互式变基,您需要使用 git rebase -i 命令,并指定要回溯多少条提交记录。
例如,要在当前分支上对最近 3 条提交进行变基,可以使用:
git rebase -i HEAD~3这会打开一个编辑器,其中显示最近的 3 条提交以及可用的命令。
变基编辑器中的命令
开始交互式变基时,Git 会打开一个文本编辑器,其中列出提交和操作说明。每条提交都以一个命令开头:
pick:按原样使用该提交。reword:使用该提交,但编辑其消息。edit:使用该提交,但暂停以修改更改。squash:与上一条提交合并,同时合并提交消息。fixup:与上一条提交合并,但丢弃当前提交的消息。drop:完全删除该提交。
示例:修改提交消息
假设您在提交消息中写错了字。您可以使用 reword 进行修正。将要修改的提交旁边的 pick 改为 reword:
pick 5a6b7c8 Add new feature pick 1d2e3f4 Fix typo in docs reword 9g0h1i2 Implement login screen
保存并关闭编辑器后,Git 会提示您编辑 9g0h1i2 提交的消息。
示例:合并提交
您经常会创建多个彼此相关的小提交,而它们其实可以合并为一条提交。使用 squash 可以将它们合并。
pick a1b2c3d Initial feature commit squash e4f5g6h Add more details fixup i7j8k9l Fix small bug
这里,e4f5g6h 会合并到 a1b2c3d 中,同时合并它们的消息。i7j8k9l 也会合并到 a1b2c3d 中,但它的消息会被丢弃(fixup)。
示例:删除提交
如果某条实验性提交已经不再需要,您可以直接使用 drop 将其从历史记录中删除。只需将 pick 改为 drop,或直接删除整行:
pick 1122334 Initial setup drop 5566778 Test experimental feature pick 9900112 Add user authentication
保存后,提交 5566778 将从您分支的历史记录中完全删除。
示例:重新排序提交
您还可以更改提交的顺序。只需在编辑器中剪切并粘贴各行即可重新排列。Git 会按照新的顺序应用更改。
原始顺序:
pick abcdef1 Add feature A pick 1234567 Add feature B
重新排序后:
pick 1234567 Add feature B pick abcdef1 Add feature A
请务必谨慎,因为如果提交之间存在依赖关系,重新排序可能会引入冲突。
黄金法则:不要对共享历史记录进行变基!
这一点至关重要:绝不要对已经推送到共享远程仓库(例如 GitHub 或 GitLab),且可能已被他人拉取的提交进行变基。
变基会重写提交 ID。如果他人的工作基于原始提交展开,那么变基后的提交会呈现为完全不同的历史记录,从而给所有相关人员带来严重冲突和混乱。
只对完全存在于本地分支中的提交进行变基!
变基命令检查
您有三条提交:A (Initial)、B (Minor fix)、C (Refactor)。您希望将 B 合并到 A 中,同时保留 A 的原始消息,然后让 C 保持不变。在交互式变基编辑器中(从最旧到最新),您会使用哪些命令?
交互式变基回顾
您已经了解了强大的 git rebase -i 命令!
- 它允许您重写本地提交历史。
- 您可以使用
reword修改消息,使用squash或fixup合并提交,使用drop删除不需要的更改,还可以重新排序提交。 - 请始终牢记黄金法则:NEVER 对已经推送到共享远程仓库的提交进行变基。
掌握交互式变基有助于保持项目历史记录整洁、易于理解!
常见问题解答
「使用交互式变基整理历史」课时是免费的吗?
是的 — 「使用交互式变基整理历史」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 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 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「使用交互式变基整理历史」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Git & GitHub Professional Workflow 课中编写并运行代码吗?
能。每节 Git & GitHub Professional Workflow 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 手动解决合并冲突
- 使用交互式变基整理历史
- 挑选提交
- 使用 Git Rerere 复用冲突解决方案