git rebase的使用

前置认知

Rebase 唯一作用:把我的代码,"插队"到最新代码的最前面。

普通 merge 会产生分叉、记录杂乱;rebase 会让代码记录是一条直线,干净无垃圾。

使用铁律(死记) :只在自己本地、没推送到远程的分支用!公共分支绝对不用!

场景一:每天开发必用------同步主干最新代码(最常用)

你的现状:你在自己的功能分支写代码,同事往主干 main 提交了新代码,你需要同步更新,避免后续合并爆炸冲突。

目标:把同事的最新代码更新到自己本地,且不产生垃圾合并记录。

csharp 复制代码
# 步骤1:保存你当前所有修改,提交到本地
git add .
git commit -m "本地功能开发临时提交"

# 步骤2:切到主干,拉取同事最新代码
git checkout main
git pull

# 步骤3:切回自己的功能分支,执行rebase同步(核心命令)
git checkout 你的分支名
git rebase main

执行后效果:Git 自动把你的所有代码,放在最新主干代码之后,历史记录一条直线,非常干净。

操作中遇到冲突?固定救命流程

rebase 卡住、提示冲突,不用慌,全程固定三步:

csharp 复制代码
# 1. 打开报错文件,手动改好冲突代码(保留正确代码,删掉冲突标记)
# 2. 保存文件,把修改加入缓存
git add .

# 3. 继续执行下一步变基
git rebase --continue

改错了、想放弃重来?直接终止

c 复制代码
git rebase --abort

输入后直接回到操作前的状态,零风险。

场景二:上线前清理垃圾提交(必学!代码整洁必备)

你的现状:开发中频繁提交,比如"修复bug""调试代码""修改错别字",一堆零碎提交,上线太难看,需要合并成一个干净的正式提交。

目标:把最近多次垃圾提交,合并成1次规范提交。

bash 复制代码
# 合并最近3次提交,数字3可按需修改
git rebase -i HEAD~3

输入命令后会弹出编辑页面,只需要改两个单词:

  • 第一个单词保留 pick(作为最终保留的提交)
  • 下面所有行全部改成 fixup(合并并删除多余提交备注)

改完直接保存退出,自动完成合并。

最终效果:原本3次杂乱提交,直接变成1次干净的正式提交,适合提测、上线。

场景三:日常拉代码替代git pull(彻底告别杂乱记录)

痛点:普通 git pull 拉代码,经常自动生成莫名其妙的合并记录,仓库历史乱七八糟。

解决方案:全程用这条命令替代 git pull

css 复制代码
git pull --rebase

作用 :先拉远程最新代码,再把你的本地代码拼接在后面,零合并垃圾记录,日常开发无脑用。

绝对不能做的3件事

只要避开这3点,rebase 永远用不崩:

  1. 远程已经推送过的分支,绝对不 rebase!会覆盖别人代码、团队冲突爆炸。
  2. main / dev 公共主干分支,绝对不 rebase!所有人共用,改崩全员出错。
  3. 多人一起开发的分支,不 rebase!只用于自己一个人开发的私有分支。

极简日常开发完整流程

这是一套可以直接复用的完整工作流,适配90%开发场景:

csharp 复制代码
# 1. 每天上班第一件事:同步主干最新代码
git checkout main
git pull
git checkout 你的分支
git rebase main

# 2. 日常开发写完代码,临时提交
git add .
git commit -m "功能开发中"

# 3. 拉取远程更新,保持代码最新
git pull --rebase

# 4. 功能完成,上线前清理所有垃圾提交
git rebase -i HEAD~3

# 5. 正常推送分支即可
git push

终极速查命令表

bash 复制代码
# 同步主干最新代码(最常用)
git rebase main

# 整理最近N次提交
git rebase -i HEAD~3

# 冲突解决后继续执行
git rebase --continue

# 放弃本次所有rebase操作(撤销救命)
git rebase --abort

# 优雅拉取远程代码(替代git pull)
git pull --rebase

最后大白话总结

1、rebase 就是用来整理代码、同步代码的工具,让提交记录干干净净,没有任何垃圾分叉。

2、日常开发只需要记住:同步主干用 rebase main、清理提交用 rebase -i、拉代码用 git pull --rebase。

3、出问题直接 git rebase --abort 撤销,零风险,放心用。

相关推荐
_柳青杨1 小时前
深入理解 JavaScript 事件循环
前端·javascript
阡陌Jony1 小时前
关于前端性能优化的一些问题:
前端
用户600071819102 小时前
【翻译】简化 TSRX
前端
IT乐手3 小时前
佛德角逼平西班牙,国足还有啥借口?
前端
JustHappy4 小时前
我汇总了身边朋友的经历才发现,其实第一份实习是最难找的......
前端·后端·面试
星栈4 小时前
Dioxus 的响应式系统:`Signal`、`Memo`、`Effect` 和异步状态到底该怎么分工
前端·前端框架
yingyima4 小时前
Java 正则表达式:比你想象的更强大
前端
yuanyxh7 小时前
macOS 应用 - 纯对话生成
前端·macos·ai编程
大家的林语冰7 小时前
ES5 凉凉,Babel 8 正式发布,默认不再编译为 ES5 和 CJS......
前端·javascript·前端工程化