看截图你现在是干净 fork 状态:本地在 6.X,远程只有 origin,正是“干净起步”场景。下面全程用 IDEA 图形界面操作。

1 阶段一:关联官方仓库(加 upstream)

  1. 顶部菜单 Git → Manage Remotes…
  2. 弹窗里已有一条 origin,点右侧的 +
    • Name:upstream
    • URL:https://github.com/dromara/RuoYi-Vue-Plus.git(你从哪 fork 的就填哪个官方地址,gitee fork 就填 gitee 地址)
  3. Git → Fetch,等右下角进度条走完
  4. 点顶部的 6.X 分支按钮,展开 Remotes,确认出现:origin/6.X、upstream/6.X、upstream/5.X

2 阶段二:立 dev(从官方 6.X)

  1. 分支弹窗里点 Remotes 下的 upstream/6.X → New Branch from ‘upstream/6.X’…
  2. 名字填 dev,OK,IDEA 自动切到 dev
  3. Ctrl+Shift+K(Git → Push) ⚠️ Push 窗口里检查右侧目标是 origin : dev。因为 dev 是从 upstream 生的,IDEA 可能默认要推去 upstream(会被拒绝)。如果显示 upstream,点目标文字改成 origin。
  4. 点 Push

3 阶段三:立 main(从 dev)

  1. 点分支按钮(此时显示 dev)→ 弹窗顶部的 New Branch
  2. 名字填 main,OK
  3. Ctrl+Shift+K,确认目标 origin : main,Push

4 阶段四:网页端收尾(顺序不能乱)

  1. 打开你 fork 的网页 → Settings → Branches → 默认分支改成 main
  2. 顺手把 main、dev 设为保护分支(禁止直接 push、走 PR)
  3. 回 IDEA 分支弹窗清理继承的官方分支:
    • Local 里的 6.X → Delete
    • Remotes 里的 origin/6.X → Delete Remote Branch(有 origin/5.X 也删)
    • (必须在 12 之后做,平台不让删默认分支)

5 阶段五:验收

分支弹窗最终长这样,即搭建完成:

Local:    main, dev
Remotes:  origin/main, origin/dev
          upstream/6.X, upstream/5.X

6 附:日常操作的 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 不用你填,也填不得:它是你把 dev push 到 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 里的斜杠是分类目录名,不是远程名,所以可以随便用;但永远不要以远程仓库名开头命名分支。