当前位置:首页 > 文章列表 > 文章 > 软件教程 > 开发工具 Git rebase 合并提交 怎样处理

开发工具 Git rebase 合并提交 怎样处理

来源:17golang原创 2026-10-22 06:31:25 0浏览 收藏

如果你在 VS Code 里连续提交了“初始化登录、补充校验、修正提示”三个本地提交,想在推送前整理成一个干净提交,可以用交互式 git rebase。核心做法是保留最早的一条 pick,把后面的提交改成 squash 或 fixup。这会重写提交历史,只适合尚未被其他人依赖的本地提交。

官方地址:https://code.visualstudio.com/

本文使用 VS Code 的源代码管理视图、集成终端和提交图谱完成操作。VS Code 只是 Git 的图形化入口,真正执行合并提交的仍是仓库里的 Git。

先把要合并的提交范围看清楚

用 文件 → 打开文件夹 打开目标仓库,点击左侧活动栏的 Source Control 图标(macOS 可按 ⌘⇧G,Windows/Linux 可按 Ctrl+Shift+G)。确认状态栏显示目标分支,例如 feature/login,并检查 Changes 区域没有尚未提交的文件。

VS Code 风格源代码管理视图显示当前分支、干净工作区和提交图谱
图1:入口说明图,先确认当前分支与工作区状态,再开始重写本地提交历史。

在 终端 → 新建终端 中做一次轻量检查。示例中的注释说明每条命令的用途,不代表本文生成了真实运行截图:

# 确认没有未提交改动,并查看最近三条提交
git status
git log --oneline -3

# 确认当前分支,避免在错误分支上整理历史
git branch --show-current

如果 git status 显示有改动,先提交或使用 Git stash 保存;不要把未提交改动混进这次 rebase。若目标提交已经推送到共享分支,也先暂停,避免别人正在基于旧 SHA 开发。

在待办编辑器里决定哪些提交合并

把光标放在 VS Code 的集成终端,执行下面的命令。HEAD~3 表示把最近三条提交放入待办列表;如果要整理五条,就改成 HEAD~5。

# 打开最近三条提交的交互式 rebase 待办
git rebase -i HEAD~3

VS Code 会打开名为 git-rebase-todo 的编辑器。列表按从旧到新的顺序排列:第一行通常保留 pick,后面的提交可以改为 squash(合并并继续编辑提交说明)或 fixup(合并并丢弃后续提交说明)。

VS Code 风格 git-rebase-todo 编辑器显示 pick squash fixup 选择
图2:操作示意图,待办列表从旧到新排列,保留首个提交并合并后续提交。

例如把待办内容整理成下面这样,然后保存并关闭编辑器:

pick a1 初始化登录
squash b2 补充校验
fixup c3 修正提示

提交短哈希和消息只是说明格式。保存后 Git 可能再次打开提交说明编辑器;保留一条清楚的最终消息,例如“完善登录校验”,保存并关闭即可。若只想快速合并、不需要保留后续说明,用 fixup;若要把说明合成一条,用 squash。

冲突时在界面里完成或撤销

如果不同提交改到了同一段内容,rebase 会暂停。点击 Source Control → Merge Changes 下的冲突文件,编辑器会显示 Current、Incoming 和 Result 区域。不要只按标签猜哪边正确:rebase 时两侧的含义取决于当前正在重放的提交,应结合代码意图手工确认。

VS Code 风格冲突状态界面显示 Merge Changes、Current、Incoming 和继续命令
图3:状态说明图,解决并暂存冲突后继续 rebase;不想保留改动时选择 abort。
  1. 打开冲突文件:在 Source Control 的 Merge Changes 区域点击文件,使用编辑器上方的 Current、Incoming、Accept Both 或 Compare Changes 操作;需要组合逻辑时直接修改 Result。
  2. 保存并暂存:保存文件后回到 Source Control,确认冲突标记已经清理,再点击文件旁的 + 将已解决文件加入 Staged Changes。
  3. 继续 rebase:在 终端 → 新建终端 执行:
# 冲突文件已保存并暂存后,继续应用当前提交
git rebase --continue

如果下一个提交仍然冲突,重复“打开、合并、保存、暂存、继续”。如果发现整理方向不对,可以在命令面板(⌘⇧P 或 Ctrl+Shift+P)运行 Git: Abort Rebase,或在集成终端执行:

# 放弃本次 rebase,尽量回到开始前的状态
git rebase --abort

--abort 会撤销本次 rebase 的冲突处理结果;开始前原本就有的未提交改动不要依赖它来恢复,重要改动应提前提交或 stash。

用提交图谱验收,再决定是否推送

rebase 成功后,在 Source Control 中展开 Source Control Graph,检查历史是否从三条本地提交变成一条新的整理提交;同时在集成终端确认状态不再显示 rebase 正在进行:

# 核对 rebase 已结束,并查看整理后的最近提交
git status
git log --oneline -3

最后按下面的边界做决定:

场景建议原因
只在本地的个人提交整理后正常推送没有其他人依赖旧提交 SHA
已经推送但没有人基于它继续开发先通知协作者,再评估强制更新rebase 已改变历史
共享分支或他人正在使用不要直接 rebase 后强推可能让其他人的分支无法正常衔接

确实需要更新一个已经推送的个人分支时,优先使用更谨慎的 --force-with-lease,并确认远端没有新的提交:

# 只在已确认远端没有他人新提交时更新个人分支
git push --force-with-lease origin feature/login

常见问题

为什么待办列表里最旧的提交要放在第一行?

Git 会按待办顺序重放提交。先保留最旧提交作为基准,再把后续提交 squash 或 fixup,最终才能得到一条合并后的提交。

rebase 过程中能不能直接关闭 VS Code?

不要把关闭编辑器当成取消操作。先用 git status 看当前状态;要继续就解决并暂存冲突后运行 git rebase --continue,要放弃就运行 git rebase --abort。

合并提交后为什么不能普通 push?

rebase 会生成新的提交 SHA,远端仍保存旧历史时,普通 push 通常会被拒绝。先确认这是允许重写的个人分支,再考虑 --force-with-lease,不要对共享主分支直接强推。

相关资料

VS Code 源代码管理说明:https://code.visualstudio.com/docs/sourcecontrol/overview

VS Code 冲突处理说明:https://code.visualstudio.com/docs/sourcecontrol/merge-conflicts

Git rebase 官方手册:https://git-scm.com/docs/git-rebase

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
开发工具 VS Code launch 注入环境变量 怎样处理开发工具 VS Code launch 注入环境变量 怎样处理
上一篇
开发工具 VS Code launch 注入环境变量 怎样处理
开发工具 Compose 等待依赖健康 怎样处理
下一篇
开发工具 Compose 等待依赖健康 怎样处理
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    585次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    622次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    655次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    622次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    436次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码