看截图你现在是干净 fork 状态:本地在 6.X,远程只有 origin,正是“干净起步”场景。下面全程用 IDEA 图形界面操作。
1 阶段一:关联官方仓库(加 upstream)
- 顶部菜单 Git → Manage Remotes…
- 弹窗里已有一条
origin,点右侧的 +- Name:
upstream - URL:
https://github.com/dromara/RuoYi-Vue-Plus.git(你从哪 fork 的就填哪个官方地址,gitee fork 就填 gitee 地址)
- Name:
- Git → Fetch,等右下角进度条走完
- 点顶部的
6.X分支按钮,展开 Remotes,确认出现:origin/6.X、upstream/6.X、upstream/5.X
2 阶段二:立 dev(从官方 6.X)
- 分支弹窗里点 Remotes 下的
upstream/6.X→ New Branch from ‘upstream/6.X’… - 名字填
dev,OK,IDEA 自动切到 dev - Ctrl+Shift+K(Git → Push)
⚠️ Push 窗口里检查右侧目标是
origin : dev。因为 dev 是从 upstream 生的,IDEA 可能默认要推去 upstream(会被拒绝)。如果显示 upstream,点目标文字改成 origin。 - 点 Push
3 阶段三:立 main(从 dev)
- 点分支按钮(此时显示 dev)→ 弹窗顶部的 New Branch
- 名字填
main,OK - Ctrl+Shift+K,确认目标
origin : main,Push
4 阶段四:网页端收尾(顺序不能乱)
- 打开你 fork 的网页 → Settings → Branches → 默认分支改成
main - 顺手把
main、dev设为保护分支(禁止直接 push、走 PR) - 回 IDEA 分支弹窗清理继承的官方分支:
- Local 里的
6.X→ Delete - Remotes 里的
origin/6.X→ Delete Remote Branch(有origin/5.X也删) - (必须在 12 之后做,平台不让删默认分支)
- Local 里的
5 阶段五:验收
分支弹窗最终长这样,即搭建完成:
Local: main, dev
Remotes: origin/main, origin/dev
upstream/6.X, upstream/5.X6 附:日常操作的 GUI 入口
| 动作 | IDEA 操作 |
|---|---|
| 官方同步 | 切到 dev → 分支弹窗点 upstream/6.X → Merge ‘upstream/6.X’ into ‘dev’ → 有冲突自动弹合并工具 → Push。(爱用网页就:切到 dev 页面再点 Sync fork,然后 IDEA 里 Fetch) |
| 开功能 | dev 上 New Branch feature/xxx,做完 push,网页 PR 合回 dev |
| 发版 | 网页 PR dev → main;合并后在 IDEA 的 Log 里右键 main 最新提交 → New Tag v1.0.0 → Push(推送窗口会带上 tag) |
| 救火 | 切到 main → New Branch hotfix/xxx → 修完 push → 网页 PR 合 main → 再切 dev 点 main → Merge 回同步 |
搭完之后记住唯一的心法:新东西永远先进 dev,main 只接收发版和 hotfix,图形界面怎么点都不会乱。
直接填 dev。
- 你现在创建的是本地分支,名字就是裸的
dev。 origin/dev不用你填,也填不得:它是你把devpush 到 origin 之后,Git 自动生成的远程跟踪引用,出现在 Remotes 下面,表示“origin 上的 dev”。- 如果你真填了
origin/dev,就会创建一个名字里真带 “origin/” 的本地分支,和远程跟踪引用撞名,以后到处报 “refname ambiguous” 歧义错误,非常难缠。
对应关系:
填 dev → Local 里出现 dev(本地分支)
Push 后 → Remotes 里自动出现 origin/dev(不用手动建)main 同理:填 main,push 后自动有 origin/main。
记一个小规则:origin/、upstream/ 这类前缀是远程仓库的专属前缀,建分支时只填斜杠后面的部分。像 feature/xxx、hotfix/xxx 里的斜杠是分类目录名,不是远程名,所以可以随便用;但永远不要以远程仓库名开头命名分支。