git的 Rebase

理解

git rebase 的直白意思是:把一段提交"挪到"另外一个基点上重放(重新应用) ,从而改写历史 、让分支历史变直(线性)。

它到底做了什么?

假设你有:

复制代码
A --- B --- C   (main)
       \
        D --- E (feature)

feature 上执行:

复制代码
git checkout feature
git rebase main

Git 会把 D、E 这两个提交从原来的基点 B"摘下来" ,再依次应用到 C 的后面

复制代码
A --- B --- C -------- D' --- E' (feature)
复制代码

D'、E' 是"重放"后的新提交(哈希变了),看起来像把 feature"挪到"main 最新位置继续写,从而形成线性历史


merge 的区别

  • merge:把两条线"合并",产生一个合并提交不改历史

  • rebase:把你的提交"搬到"对方后面,改写历史,历史更整洁。

简记:

  • 想要干净一条线rebase

  • 想要保留真实分叉/合并关系merge


常见用法

  1. 1、把功能分支移到主分支最新位置

    git checkout feature
    git fetch origin
    git rebase origin/main

然后再合并/推送,减少冲突。

  1. 2、交互式 rebase(整理历史)

    git rebase -i HEAD~5

在弹出的列表里可以:

  • pick 使用

    • reword 改提交信息

      • squash/fixup 合并多个提交

      • drop 丢弃某次提交

      • edit 暂停在某次提交(常用于"删提交但保留代码":git reset --mixed HEAD^ 然后重提)

  1. 把某次提交的父链改到别处

    git rebase --onto new-base old-base branch

意思是:把 branch从 old-base 之后 的那段提交,搬到 new-base 上。


什么时候用 / 不用

适合:

  • 让历史更直(线性历史、易读)。

  • 本地分支的提交还没分享给别人(还没 push 或别人没基于它工作)。

  • 整理提交(合并、改信息、删除某些提交)。

避免:

  • 已经被多人拉取/基于的公共分支(如远程 main),rebase 会改哈希,会给同事带来同步成本。

  • 不熟悉时直接在远端受保护分支上改历史。


推送注意

rebase 改了提交哈希,推送时需要强推

复制代码
git push --force-with-lease 

--force-with-lease--force 安全,能避免覆盖别人新提交)


一句话总结

  • rebase = 改基重放:把你的提交"挪"到新的基点上,改写历史,让提交串更直更干净。

  • 本地整理历史、跟进主分支最新进展、删除/合并历史提交时,用 git rebase 最合适。

  • 改历史要谨慎:公共分支少用,推送用 --force-with-lease

相关推荐
你知道“铁甲小宝”吗丶5 分钟前
git推送到多平台(gitee/github)
git·gitee·github
bksczm11 分钟前
Linux之基础开发工具之git
git
GUET_一路向前19 分钟前
【git工作常用指令】
大数据·git·elasticsearch
handler011 小时前
Git 核心指令速查
linux·c语言·c++·笔记·git·学习
二宝哥1 小时前
大数据之yum安装git
git
牛奶咖啡132 小时前
Git实践——git远程仓库操作
git·git远程仓库的创建·github创建仓库·git将本地仓库推送到远程仓库·使用git克隆远程仓库到本地·git分支的创建与合并·git冲突的产生与解决
随风,奔跑3 小时前
Git学习笔记
笔记·git·学习
Gary Studio4 小时前
Git vscode 插件推荐
ide·git·vscode
StackNoOverflow5 小时前
IDEA + Git + Gitee 全流程实战:从安装、提交到解决冲突
git·gitee·intellij-idea
淘矿人19 小时前
从0到1:用Claude启动你的第一个项目
开发语言·人工智能·git·python·github·php·pygame