goland 不自动同步远程分支,需手动执行 git fetch --all 刷新 branches 窗口;检出远程分支须右键 → checkout revision… 并勾选 create new branch;推送前需确保设置 upstream,重命名本地分支后须手动推新删旧并重新关联上游。

GoLand 本身不自动同步本地分支和远程分支的命名或状态,必须手动 fetch + 检出 + 推送,否则你看到的“远程分支”可能早已过期。
怎么让 GoLand 显示所有远程分支
默认情况下,GoLand 的 Branches 窗口(Alt+9 → Git → Branches)只显示本地分支和已跟踪的远程分支(如 origin/main)。如果远程新建了 feature/api-v2,但你没 fetch 过,它就不会出现在列表里。
- 打开 Terminal(Alt+F12),运行
git fetch --all—— 这步是前提,否则 IDE 无从知道远程有什么 - 刷新 Branches 窗口(右键空白处 → Reload project 或按 Ctrl+R),新远程分支才会出现
- 远程分支名始终带前缀,比如
origin/feature/login,不能直接双击检出;需右键 →Checkout Revision…才能基于它新建本地分支 - 若远程分支被删除(如 PR 合并后清理),本地仍保留
origin/xxx引用,需手动运行git remote prune origin清理过期引用
从远程分支创建本地分支的正确操作
别直接在 Branches 窗口双击 origin/xxx —— 那只是查看提交历史,不会创建可编辑的本地分支。
使用约定式提交(Conventional Commits)从 Git 历史记录中生成结构化变更日志,支持多种格式、AI 增强型描述以及可自定义的范围……
- 在 Branches 窗口找到目标远程分支(如
origin/dev),右键 →Checkout Revision… - 勾选
Create new branch,填入本地分支名(如dev),确保Checkout branch已选 - 点 OK 后,GoLand 会执行
git checkout -b dev origin/dev,并自动设置上游(upstream)为origin/dev - 验证是否成功:终端运行
git branch -vv,应看到dev后面标着[origin/dev] - 如果漏掉 upstream 设置,后续
git push会报 “The current branch has no upstream branch”,得补git branch --set-upstream-to=origin/dev dev
推送本地分支到远程并建立跟踪关系
刚建好的本地分支默认不推送到远程,也不会自动创建同名远程分支。
- 确保当前在目标分支(VCS 微件显示分支名正确),右键项目根目录 →
Git → Repository → Push - 在 Push 对话框中,勾选你要推的本地分支(如
feature/login),右侧 Remote 分支名会自动填为feature/login - 关键点:勾选
Push current branch to alternative branch并输入远程分支名——这步不是必须,但能避免命名不一致 - 首次推送后,GoLand 会在 Branches 窗口把该分支标记为 “tracked”,并显示绿色箭头(
↑1表示有 1 个待推送提交) - 如果远程已存在同名分支且非快进(non-fast-forward),IDE 会拦截并提示;此时不能强推,应先
git pull --rebase origin/feature/login再 push
重命名本地分支并同步到远程
GoLand 允许重命名本地分支,但不会自动处理远程分支——这是常见误操作源头。
- 在 Branches 窗口右键本地分支 →
Rename,改完后本地分支名立即更新 - 旧远程分支(如
origin/old-name)依然存在,新分支(new-name)尚未关联任何远程 - 先推送新分支:
git push origin new-name(Terminal 中执行,GoLand UI 不提供“推送到新名”选项) - 再删旧远程分支:
git push origin --delete old-name - 最后设置上游:
git branch --set-upstream-to=origin/new-name new-name - 注意:
git rename-branch不是 Git 命令,别搜这个——重命名本质是git branch -m+git push+git push --delete三步
最易忽略的是 git fetch --all 的时效性:Branches 窗口里的远程分支列表不是实时的,它依赖本地 ref 数据。一次 fetch 可能隔几小时才过期,但协作中别人随时可能删分支、合 PR、推新 commit,不主动 fetch 就会基于陈旧信息操作。










