尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Git 合并多次提交记录实战

Git 合并多次提交记录实战 日常开发中我们经常在同一个分支上连续提交多次修 typo、补测试、小调整等合并到主分支前希望把这段历史整理成一条清晰的提交。本文介绍如何把多次提交合并成一次并说明合并后历史会怎样变化。一、先看清当前分支的提交记录合并前先确认要合并的是哪几条提交。简洁列表推荐gitlog--oneline带分支图、看最近 20 条gitlog--oneline--graph-20示例输出a1b2c3d (HEAD - feature/login) 修复登录页样式 e4f5g6h 补充单元测试 i7j8k9l 实现登录接口 m0n1o2p 添加登录页组件 p3q4r5s 初始化项目 (main)这里的「最近几次」指的是当前所在分支上、从HEAD往前数的提交。HEAD~5就表示当前分支上最近 5 次提交。二、合并后历史会变少吗会。合并squash后这段历史里的提交条数会变少。合并前例如最近 5 条提交 → 历史里有 5 条记录。合并后这 5 条被压成 1 条 → 这段只算 1 条记录。注意被合并掉的提交的commit hash 会变相当于重写了这段历史。若已经推送到远程需要配合强制推送见下文。三、方法一交互式变基可精细控制适合想挑选要合并的提交、调整顺序或编辑说明的场景。1. 合并当前分支最近 N 次提交例如合并最近 5 次gitrebase-iHEAD~52. 在编辑器中修改指令会打开类似下面的列表pick p3q4r5s 初始化项目 pick m0n1o2p 添加登录页组件 pick i7j8k9l 实现登录接口 pick e4f5g6h 补充单元测试 pick a1b2c3d 修复登录页样式把从第 2 条起的pick改成squash或简写s保留第 1 条为pickpick p3q4r5s 初始化项目 squash m0n1o2p 添加登录页组件 squash i7j8k9l 实现登录接口 squash e4f5g6h 补充单元测试 squash a1b2c3d 修复登录页样式保存并关闭编辑器。3. 编写合并后的提交说明接下来会再弹出一个编辑器把多条提交说明合并成一条例如# 请修改本次合并的提交说明以 # 开头的行会被忽略 feat: 登录功能 - 添加登录页组件 - 实现登录接口 - 补充单元测试 - 修复登录页样式保存后这 5 条提交就变成 1 条。4. 若已推送到远程历史被重写需要强制推送建议用--force-with-leasegitpush --force-with-lease四、方法二软重置 重新提交最简单不打开交互界面直接把「最近 N 次提交」撤销成未提交的改动再一次性提交。示例把最近 3 条合成 1 条合并前a1b2c3d 修复登录页样式 e4f5g6h 补充单元测试 i7j8k9l 实现登录接口执行# 撤销最近 3 条提交改动保留在暂存区gitreset--softHEAD~3# 用一条新提交包含所有改动gitcommit-mfeat: 登录功能组件、接口、测试与样式修复合并后x9y8z7w feat: 登录功能组件、接口、测试与样式修复同样若已推送过需要gitpush --force-with-lease五、两种方式对比方式适用场景交互式变基想选择合并哪些提交、调整顺序、保留/编辑多条说明软重置 提交只关心「最近 n 条合成 1 条」操作最少六、小结用git log --oneline或--graph -n查看当前分支的提交记录。「最近 5 次」 当前分支上HEAD~5不是别的分支。合并后提交次数会变少对应历史被重写已推送时需git push --force-with-lease。需要精细控制用git rebase -i HEAD~n图省事用git reset --soft HEAD~ngit commit。按需选一种方式即可在合并到主分支前把本地多次提交整理成一条清晰记录。
返回列表