[Bug][Windows/macOS] 从 origin/main 新建功能分支后,推送可能直接更新远端 main
メンテナーはふだん 1 日以内に返信
@milestone-17 がすでに取り組んでいます。
2026年10月17日 から。
評価
この issue はまだ評価されていません。
説明
问题
从 origin/main 新建并切换到异名功能分支(例如 feature/topic)后,Git 默认可能将其 upstream 自动配置为 origin/main。Lithe 推送时直接使用 upstream 分支名构造显式 refspec,导致功能分支提交可能直接更新远端 main。
影响 Windows 和 macOS:两平台相关创建分支及推送入口均调用同一 Rust Core 行为。Windows 有用户截图反馈;macOS 影响依据为源码调用链核对,尚未运行两平台完整 GUI 复现。隔离本地 Git 仓库已验证底层命令行为。用户使用的发行版本尚未确认。
复现
前提:远端允许更新 main,采用通常的 branch.autoSetupMerge=true,没有覆盖推送远端的特殊配置。
- Git 日志右键
origin/main,选择“从 origin/main 新建分支”。 - 输入
feature/topic并切换到该分支。 - 新建提交后,在 Lithe 中推送或使用“提交并推送”。
- 检查远端目标及 upstream。
隔离仓库验证的命令链:
git switch -c feature/topic refs/remotes/origin/main
git branch -vv
# feature/topic tracks origin/main
git config --get branch.feature/topic.merge
# refs/heads/main
# Lithe 生成的等价命令:
git push --dry-run origin refs/heads/feature/topic:refs/heads/main
# feature/topic -> main
相同状态下,普通 git push 配合 push.default=simple 会因分支名不匹配拒绝执行;Lithe 使用显式 refspec 则可通过 dry-run。远端保护规则可能阻止真正更新,但不能依赖远端保护代替正确产品行为。
截图中 HEAD -> feature/topic, origin/main, origin/HEAD 仅说明引用指向同一提交,不能单独证明 upstream 配置。现场确认还需结合 git branch -vv、分支配置及实际推送命令。
原因与跨平台证据
核对版本:03c84e5dac088971654996c834c6746aa787707a。
- Core 创建分支:执行
switch -c <name> <reference>或branch <name> <reference>,未显式控制 tracking,远端起点受 Git 自动跟踪配置影响。 - Core 解析推送目标:选中的远端与 upstream 远端相同时,直接使用 upstream 分支名。
- Core 构造推送命令:显式指定源与目标 refspec,
push.default=simple异名保护不再生效。 - Windows 创建入口、创建 API、推送 API。
- macOS 创建分支适配、推送适配:均进入共享 Core 的
createBranch/push。
建议设计
- 区分“从远端分支派生功能分支”和“检出远端分支进行跟踪”。从
origin/main创建异名功能分支时,不隐式将源分支设为后续推送目标;首次默认发布到同名远端功能分支,成功后建立 upstream。 - 推送界面始终展示完整方向,如
feature/topic → origin/feature/topic,标明是否新建远端分支;成功结果也显示实际目标。 - 对已有异名 upstream,推送前要求明确选择“发布到同名远端分支(推荐)”或“继续推送到现有 upstream”。选择后者时按钮明确写出目标,如“推送到 main”。保留用户有意配置异名 upstream 的能力,不能静默改写。
- 普通同名分支推送不增加通用二次确认;异名目标通过明确选择解决,避免连续堆叠确认框。
- “提交并推送”走相同检查,尽量在提交前完成目标选择;实际推送保留预览后状态变化校验。
- 共享 Core 统一目标解析/校验语义,两平台一致消费,覆盖所有推送入口。
验收标准
- Windows / macOS 从
origin/main新建异名功能分支,首次默认发布到同名远端分支,不更新main。 - 显式检出并跟踪远端分支的语义正常。
- 已有
feature/topic → origin/main配置未经明确选择不会直接更新main。 - 有意配置异名 upstream 的用户仍能明确选择该目标,配置不会被静默改写。
- 普通推送、分支菜单推送及“提交并推送”等入口一致,预览与实际目标一致。
- 覆盖无 upstream、同名/异名 upstream、推送远端覆盖及预览后状态变化场景;检查新建 worktree 是否存在同类隐式跟踪问题。
- 补充共享 Core 回归验证、两平台交互验证及对应功能矩阵记录。
- 主要言語
- TypeScript
- スター
- 1.8k
- フォーク
- 151
- 平均マージ
- 11時間 45分
- マージ済み PR(30日)
- 293
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
1lck/Lithe-IDEA のほかの issue
-
area:editor bug P0 platform:macos review: low
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
1lck/Lithe-IDEA#1118 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
ci(macos): Mac mini runner 上 AgentBrandIconResourceTests 品牌图标渲染测试必然失败対応中かも @1lck が今日担当しました。 オープンreview: medium
1lck/Lithe-IDEA#1297 · コメント 2 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
[Bug] 下拉git分支疯狂上下滚动直接崩了退出対応中かも @arkleselect が今日担当しました。 オープンarea:editor bug issue-form:bug P0 platform:macos review: low
1lck/Lithe-IDEA#1277 · コメント 4 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
[Feature] 需要关闭已保存功能対応中かも @haloneko が 1 日前に担当しました。 オープンarea:ux claimed enhancement issue-form:feature P1 platform:windows review: medium
1lck/Lithe-IDEA#1260 · コメント 2 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
[Feature] win的项目/提交向mac对齐対応中かも @mirakyux が 1 日前に担当しました。 オープンarea:project claimed enhancement issue-form:feature P0 platform:windows review: medium
1lck/Lithe-IDEA#1257 · コメント 2 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
1lck/Lithe-IDEA の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 67/100
agilepathway/label-checker#739 · コメント 4 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 68/100
CopilotKit/OpenBot#800 ·
メンテナーはふだん 1 日以内に返信
-
Endpoint links in the tag operations list are below the 24px target size対応中かも @AdzerKI が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 79/100
ehmpathy/rhachet-roles-bhuild#471 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 73/100
メンテナーはふだん 1 日以内に返信