git rebase upstream/main 是最常用同步方式,它将本地功能分支的提交线性重放到上游主分支最新提交之后,重建父节点使历史整洁,适用于未推送或私有分支场景,需先配置 upstream 并 fetch 后执行。

git rebase upstream/main 是最常用同步方式
直接在本地功能分支上执行 git rebase upstream/main,就能把当前分支的提交“重新播放”到上游主分支最新状态之后。这不是简单复制代码,而是让 Git 重建每个提交的父节点,使历史变成线性。适用于你自己的功能分支还没推送到远程、或只有你一人使用该分支的场景。
- 必须先确保已添加上游远程:如果没配过
upstream,先运行git remote add upstream - 同步前要
git fetch upstream,否则upstream/main还是旧的 - 别在多人共用的共享分支(如
develop)上用rebase,会改写提交 SHA,导致队友拉取时大量冲突 - 如果本地分支已有推送记录,
rebase后必须git push --force-with-lease才能更新远程,不能用--force
rebase 过程中遇到冲突怎么处理
冲突不是失败,是 Git 在等你做决定。它和 merge 的冲突标记格式一样,但上下文含义不同:HEAD 指的是“上游分支当前最新提交”,your-commit 指的是你正在重放的那个本地提交。
抓取指定 GitHub用户的 Stars 项目,生成标准化中文 Markdown 报告。用户提及「分析 GitHub stars」「导出收藏项目」「汇总 GitHub 星标」「生成 stars 报告」或粘贴含 ?tab=stars 的链接时触发。执行通过 bash...
- 手动编辑冲突文件,删掉
、<code>=======、>>>>> your-commit及中间内容,只保留最终想要的代码 - 改完后
git add标记为已解决 - 运行
git rebase --continue继续重放后续提交 - 如果中途想放弃,用
git rebase --abort,一切回到 rebase 前状态
为什么不能 git rebase origin/main
很多人误以为 origin 就是“上游”,其实它只是你 fork 之前克隆的那个远程别名。如果你是 fork 了别人仓库来开发,origin 指向的是你自己的远程仓库(比如 github.com/yourname/repo),而真正的上游是原作者的仓库,应设为 upstream。
- 用
git remote -v查看当前所有远程及其 URL,确认哪个才是原始项目地址 -
origin/main通常是你自己推送过的分支,可能已经落后于真实上游,甚至包含你不想要的改动 - 一旦错用了
origin/main,rebase 后的历史可能把你的私有提交“夹”在一堆无关提交之间,CI 流水线或 Code Review 工具识别困难
同步完记得检查分支关系是否干净
rebase 完成后,用 git log --oneline --graph --all 快速扫一眼图谱。理想状态是:你的功能分支提交紧接在 upstream/main 最新提交之后,呈一条直线,没有分叉线或 merge commit。
- 如果看到多个并行分支线或意外的
merge提交,说明可能误操作了(比如在错误分支上执行了 rebase) - 如果本地分支已推送到远程,且你刚 force-push 过,务必立刻通知协作者——他们下次
git pull会失败,需手动git reset --hard upstream/main && git pull或git rebase --onto修复 - 真正容易被忽略的是:rebase 不会自动更新你本地的
origin/xxx远程跟踪分支,它们仍指向旧位置。需要git fetch --prune origin清理过期引用










