按作者压缩Git提交记录 | AI生成和翻译
理解目标
Git 没有内置的「按作者压缩提交」命令,但你可以通过交互式变基手动分组并压缩提交。思路是选取最近的 10 次提交(假设涉及 3 位不同作者),将每位作者的提交合并为单个提交,最终得到 3 次提交。
此方法假设:
- 你当前处于包含这些提交的分支(如主分支或特性分支)
- 提交记录是线性的(无合并提交)
- 你已提前知晓作者信息
若提交记录存在非线性或复杂情况,可能需要谨慎处理以避免冲突
按作者压缩提交的步骤
-
检查最近 10 次提交
运行git log --oneline -10查看最近 10 次提交的哈希值、作者和提交信息。可通过git log --format="%an" -10 | sort | uniq识别独立作者 - 启动交互式变基
定位第 10 次提交之前的基准点。若最新提交为 HEAD,则基准点为HEAD~10。运行:git rebase -i HEAD~10这将打开编辑器(默认 vim)并列出最近 10 次提交:
pick abc123 作者 A 的首次提交 pick def456 作者 A 的第二次提交 pick ghi789 作者 B 的提交 pick jkl012 作者 C 的提交 ...(更多提交)- 每行均以
pick开头
- 每行均以
- 标记需压缩的作者提交
针对每位作者:- 选定一个需保留的基准提交(选择最早或最相关的提交)
- 将该作者其余提交的
pick改为s(压缩至基准提交)
示例(3 位作者):pick abc123 作者 A 的首次提交(保留此项) s def456 作者 A 的第二次提交(压缩至上行) pick ghi789 作者 B 的提交(保留此项) pick jkl012 作者 C 的首次提交(保留此项) s mno345 作者 C 的第二次提交(压缩至上行)保存并退出编辑器,变基过程随即启动
-
在变基过程中编辑提交信息
每次压缩操作时,Git 会暂停并允许编辑提交信息(合并被压缩的提交)。可更新为类似「作者 A 的压缩提交:描述」的格式。保存后继续操作
若存在多次压缩,需为每位作者重复此过程。每次编辑后运行git rebase --continue
若出现冲突(简单压缩中较罕见),通过git add <文件>解决后执行git rebase --continue - 验证并推送
变基完成后检查日志:git log --oneline -10。应可见 3 次提交,分别对应每位作者
若需推送至共享分支(破坏性变基),需强制推送:git push --force-with-lease origin 分支名称
注意: 仅当确认旧提交无需在其他地方使用时才执行强制推送,此操作将重写历史记录
技巧与注意事项
- 若某作者提交次数较多,请在变基列表中高效分组(如集中处理作者 A 的所有提交)
- 如需自动化,可借助
git-interactive-rebase-tool或脚本工具,但手动变基更为直观 - 需按精确作者筛选时,可提前使用
git log --author="作者姓名"确认 - 建议先在备份分支测试以避免数据丢失
更多变基相关说明请参阅:git help rebase。若此方法与你的实际场景不符,请提供更多关于提交结构的详细信息