Featured image of post 使用交互式 Git Rebase 清理提交历史记录Featured image of post 使用交互式 Git Rebase 清理提交历史记录

使用交互式 Git Rebase 清理提交历史记录

在创建拉取请求之前使用 git rebase -i 命令压缩、编辑和清理 Git 提交历史记录的分步指南。

介绍

在日常软件开发过程中,通常会出现混乱的提交历史记录,其中充满了“WIP”、“修复拼写错误”或“测试部署”等日志。

如果将这些提交直接合并到主分支中,则查找引入特定错误的位置或理解添加一行代码的原因变得极其困难。

Git 的交互式变基 (git rebase -i) 允许您在创建拉取请求之前清理提交历史记录。您可以将多个提交压缩为一个、编辑提交消息、重新排序历史记录或删除冗余更改。本文介绍了利用交互式变基的分步工作流程。


1.什么是交互式Rebase?

git rebase -i 是一个命令,用于打开交互式编辑器屏幕,显示指定范围内的提交列表。通过修改此列表中的指令,Git 将这些更改按顺序应用到您的分支历史记录。

核心用例

  • Squash: 将小型中间提交(例如“拼写错误修复”)合并为单个干净提交。
  • 重写: 修改提交消息以匹配团队命名约定。
  • **删除:**从历史记录中完全删除不必要的提交。
  • 编辑: 在特定提交处暂停变基过程以添加或删除文件。

2. 基本分步工作流程

让我们看看如何运行变基来清理本地分支。

第 1 步:指定变基范围

如果您想编辑当前分支上的最后三个提交,请运行:

git rebase -i HEAD~3

要编辑自您的分支与另一个分支分离以来的所有提交(例如 main),请运行:

git rebase -i main

第 2 步:配置待办事项列表

运行该命令将打开系统的默认文本编辑器(例如 Vim、Nano 或 VS Code),显示提交列表:

pick a1b2c3d WIP: Started login interface
pick e5f6g7h fixed typo in input
pick i9j0k1l Added login validation

# Rebase a1b2c3d..i9j0k1l onto z9y8x7w
# ...
  • 注意: 提交按时间顺序显示:最旧的在顶部,最新的在底部
  • 更改每行开头的关键字以告诉 Git 如何处理该特定提交。

核心操作命令

命令缩写行动
选择占位符_0按原样使用提交(默认)。
改写占位符_0使用提交,但编辑提交消息。
编辑占位符_0使用提交,但暂停变基以编辑文件。
壁球占位符_0将此提交合并到先前(较旧的)提交并合并消息。
修复占位符_0将此提交合并到前一个提交中,并丢弃此提交的消息。
掉落占位符_0完全删除此提交。

实际例子

要将拼写错误修复和验证提交合并到初始“启动登录界面”提交中,请按如下方式编辑文件:

pick a1b2c3d WIP: Started login interface
f e5f6g7h
s i9j0k1l
  • e5f6g7h 设置为 fixup (f),这意味着它会合并到 a1b2c3d 中,并且其消息将被丢弃。
  • i9j0k1l 设置为 squash (s),合并到父级中,同时提示您重写最终组合的提交消息。

保存并关闭编辑器以开始变基。

第 3 步:编写最终提交消息

如果您选择 squash,Git 将打开另一个编辑器屏幕来完成组合消息:

# This is a combination of 2 commits.
# This is the 1st commit message:

WIP: Started login interface

# This is the commit message #2:

Added login validation

将其重写为干净的提交消息:

feat: Implement login page with validation rules

- Designed form fields for email and passwords.
- Added client-side red border indicators on input validation errors.

保存并关闭编辑器。 Git 将应用更改,将三个提交压缩到一个节点中。


3. 解决 Rebase 期间的冲突

如果发生冲突,Git 会暂停变基并突出显示冲突行。

  1. 手动解决冲突: 编辑冲突的源代码文件以选择正确的更改。
  2. 暂存更改: 运行 git add <filename> (不要运行 git commit)。
  3. 继续变基: 运行:
    git rebase --continue
    

如果您遇到困难或犯了错误,请中止整个过程并通过运行以下命令将分支返回到变基前的状态:

git rebase --abort

4. 变基的黄金法则

虽然 rebase 非常有用,但您必须遵循一项严格的准则:

[!警告] 永远不要对已经推送到其他开发人员正在工作的公共/共享存储库分支(例如,主要或开发)的提交进行变基。

变基更改提交哈希值。如果将修改后的哈希推送到共享分支,则会破坏其他开发人员的本地历史记录跟踪,从而导致合并冲突和潜在的代码丢失。仅对本地提交或隔离的拉取请求分支上的提交进行变基。

结论

使用 git rebase -i 可以让您将正在进行的工作保存为小型本地提交,然后在与团队共享代码之前将它们整理为干净的功能提交。开始使用交互式变基来保持存储库历史记录的可读性。