一次意外的 Git PR 提交混乱与修复记录
23

背景

在为 Casdoor 项目提交 enhance application name validation logic 功能时,我创建了一个新的分支 feat/validate-application-name 并提交了相关代码。但在提交与同步过程中,我不小心将另一个特性(Aliyun Captcha v2 的升级)相关的提交一并推送到了该分支,导致 PR(#3877)中包含了不属于本功能的多余变更。

本篇记录我如何清理提交历史并恢复一个干净的 PR。

问题发现

在 GitHub 上发起 PR 后,注意到:

  • PR 包含了 5 个提交,其中只有 1 个是我真正想提交的。
  • 多余的提交来源于另一个功能分支 feat/upgrade-aliyun-captcha
  • Files changed 显示有 21 个文件发生变更,远超预期。
  • 同时还有部分 CI 检查失败,提示合并不稳定。

原因分析

错误的根本原因是:在当前工作分支上进行了其他功能的开发或合并操作,并在未分支隔离的情况下直接推送。

具体表现为:

  • git pullmerge 时不小心合入了别的分支;
  • 或使用了 git commit 提交了不属于当前功能的变更;
  • PR 基于错误的提交历史构建,导致提交堆叠。

修复思路

为避免关闭 PR 重开,我决定使用 git rebase -i 清理提交历史,保留当前功能相关的提交,删除其余。

操作步骤

  1. 查看提交历史:
git log --oneline

输出:

a5923d6 Merge branch 'feat/validate-application-name' ...
8cf669a feat: Add field check
12cc0f4 feat: remove support for Non trace verification...
8cc22de feat: upgrade Alibaba cloud captcha provider...
c2ed23b feat: enhance application name validation logic
  1. 交互式 Rebase:
git rebase -i HEAD~4

将打开如下内容:

pick c2ed23b feat: enhance application name validation logic
pick 8cc22de feat: upgrade Alibaba cloud captcha provider...
pick 12cc0f4 feat: remove support for Non trace verification...
pick 8cf669a feat: Add field check
pick a5923d6 Merge branch...
  1. 修改为:
pick c2ed23b feat: enhance application name validation logic
pick 8cf669a feat: Add field check
drop 8cc22de feat: upgrade Alibaba cloud captcha provider...
drop 12cc0f4 feat: remove support for Non trace verification...
drop a5923d6 Merge branch...
  1. 保存退出,等待 Rebase 完成。

  2. 强制推送:

git push -f origin feat/validate-application-name

效果验证

重新查看 GitHub PR 页面:

  • PR 提交数已减少为 1 个;
  • Files changed 中无冗余文件;
  • 无其他功能变更混入;
  • CI 检查重新运行并通过。

总结与教训

本次经历再次强调了分支隔离与提交管理的重要性

  • 每一个功能、Bug 修复都应使用单独的分支;
  • 任何时候避免在功能分支上进行无关修改;
  • 推送前使用 git loggit diff 等命令检查提交范围;
  • 必要时用 git rebase -i 整理提交历史,保证 PR 的整洁性。

附录:相关命令清单

# 交互式 rebase 最近 N 次提交
git rebase -i HEAD~N

# 删除某些提交(使用 drop)
# 编辑完后强制推送到远程 PR 分支
git push -f origin your-feature-branch

# 检查当前提交历史
git log --oneline
一次意外的 Git PR 提交混乱与修复记录
https://cnqs.moe/archives/yi-ci-yi-wai-de-git-pr-ti-jiao-hun-luan-yu-xiu-fu-ji-lu
作者
Administrator
发布于
更新于
许可