讲师中心 微信公众号
AI工具推荐 视频效率加速

Git怎么使用rebase合并代码_Git rebase和merge区别详解【进阶】

老墨大大_4385

老墨大大_4385

发布时间:2026-03-31 15:06:44

|

856人浏览过

|

来源于php中文网

原创

rebase仅适用于未推送的本地分支,否则会重写提交哈希导致协作混乱;已推送分支需用--force-with-lease强制推送,冲突时用--continue或--abort处理。

git怎么使用rebase合并代码_git rebase和merge区别详解【进阶】

rebase 会重写提交历史,别在已推送的分支上用

这是最常踩的坑:把本地 feature 分支 rebase 到 main 后直接 git push,结果被拒绝——因为远程已有相同分支名但提交历史不一致。Git 拒绝非快进(non-fast-forward)推送,本质是保护协作安全。

真正该用 rebase 的场景,只有一种:你自己的、尚未推送到远程的本地分支。比如刚从 main 拉出 feature/login,写了 3 个提交,此时 main 已有新提交,你想让自己的改动“叠”在最新 main 之上,再推送。

  • 操作顺序:git checkout feature/login → git rebase main → git push origin feature/login
  • 如果已推过,又想 rebase,必须加 --force-with-lease(不是 --force),它会检查远程分支是否被别人更新,避免覆盖他人工作
  • rebase 过程中遇到冲突,解决后用 git add . 标记,再执行 git rebase --continue;不想继续就用 git rebase --abort 回退到 rebase 前状态

merge 和 rebase 的根本区别不在“要不要保留分支线”,而在“要不要改提交哈希”

很多人说 “rebase 让历史线性,merge 保留分叉”,这没错,但没说到根上。关键影响是:rebase 后每个提交的 SHA-1 哈希值都会变,而 merge 不会动原有提交。

这意味着:如果你在团队里用 rebase,别人基于你旧提交做的工作(比如 code review 评论、CI 构建记录、bug 跟踪链接),会全部失效——因为那些记录指向的哈希已经不存在了。

alfred-github-backup
alfred-github-backup

GitHub 仓库备份技能 - 将 OpenClaw 工作空间自动或手动备份至 GitHub 私有仓库。支持自动定时备份和手动交互式配置,引导完成 Token 配置、仓库创建、首次备份及定时任务设置。用途:(1) 首次设置 (2) 日常备份。

下载
  • merge 生成一个新提交(merge commit),引用两个父提交,历史可追溯,适合多人协作的长期分支
  • rebase 把你的提交一个个“复制”成新提交,原提交被丢弃,适合整理本地小功能块,让 PR 更干净
  • CI/CD 系统通常依赖提交哈希做缓存或标记,rebase 后缓存失效,可能重复构建;某些审计工具也靠哈希做完整性校验

交互式 rebase(rebase -i)是清理本地提交的唯一靠谱方式

写代码时随手 git commit -m "fix" 太常见,等要提 PR 时发现一堆琐碎提交。这时候别手动 reset + add + commit,用 git rebase -i HEAD~5 更安全可控。

它会打开编辑器列出最近 5 个提交,每行开头是命令词:pick(保留)、squash(合并到上一提交)、drop(丢弃)、edit(修改该提交)。

  • 想把第 2、3、4 个提交合并进第 1 个?把它们前面的 pick 改成 squash,保存退出后会提示你编辑新提交信息
  • 误操作导致 rebase 卡住?看终端提示的 git rebase --continue 或 --abort,别关终端
  • 不要对 HEAD~n 中包含已推送提交的范围做 -i,否则等于主动制造哈希不一致

rebase 后 git log 看不到 merge commit,但 git reflog 里全都有

有人 rebase 完发现“原来那个提交不见了”,慌了。其实它没丢,只是从 git log 默认视图里隐去了——因为 log 只显示当前分支能到达的提交,而 rebase 后原提交已不可达。

这时用 git reflog 就能看到所有 HEAD 移动记录,包括 rebase 前的状态。你可以用 git reset --hard HEAD@{1} 回退到上一步(reflog 中的 HEAD@{1} 是 rebase 前的 HEAD)。

  • reflog 是本地的、不共享的,只存在你机器上,所以它不能当备份用
  • 想长期保留某次 rebase 前的状态?提前打个 tag:git tag backup-before-rebase
  • 某些 GUI 工具(如 VS Code Git 插件)默认不显示 reflog,得手动调出或切命令行
事情说清了就结束。最麻烦的从来不是命令怎么敲,而是判断“这个分支到底算不算我的私有分支”。只要这点模糊,rebase 就随时可能变成事故起点。

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

667

2025.10.24

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

4747

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2148

2023.08.10

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

5219

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

1600

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

914

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3417

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3081

2024.04.09

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

120

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 7.9万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn