vscode 同步更改按钮推送到与当前分支不同的分支

apeeds0o  于 4个月前  发布在  Vscode
关注(0)|答案(6)|浏览(139)

这个问题在所有扩展都禁用时是否发生?:是
版本:1.62.3(用户设置)
提交:ccbaa2d
日期:2021-11-17T08:11:14.551Z
Electron:13.5.2
Chrome:91.0.4472.164
Node.js:14.16.0
V8:9.1.269.39-electron.0
OS:Windows_NT x64 10.0.19043
重现步骤:

  1. 克隆一个包含指向子模块仓库分支的子模块的仓库。
  2. 根据main强制重新创建基于git switch -C <branch name> origin/main的分支。
  3. 进行更改并提交。
  4. 在源代码控制面板中点击“同步更改”按钮
    预期结果:
    显示一个对话框消息,包含"此操作将推送和拉取提交到和来自origin/<branch name>",然后VS Code将提交推送到origin/<branch name>
    实际结果:
    显示一个对话框消息,包含"此操作将推送和拉取提交到和来自'origin/main'",然后VS Code将提交推送到origin/main
    此外,底部工具栏中的当前分支指示器显示正确的分支,而“同步更改”按钮触发推送到另一个分支。
8hhllhi2

8hhllhi22#

实际问题是你的分支是从 origin/main 分支分叉出来的。请验证:

> git status
On branch test
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

这是GitHub和GitLab的通常工作流程。
目前,默认的推送策略(push.default)是simple,它只在本地分支(test)和上游分支(origin/main)具有相同名称时将它们推送到上游分支。但不知何故,vscode的行为更像是upstream策略——在不检查它们的分支名称的情况下将本地分支推送到上游分支。
相反,current策略将本地分支推送到与上游远程同名的分支(无论远程跟踪分支是什么)。

解决方法

git config push.default current

# or globally

git config push.default current --global
30byixjq

30byixjq3#

我也受到了这个问题的影响。不幸的是,@proletarius101提到的解决方法似乎不起作用。在我的情况下,我的分支是从上游分支upstream/main分叉出来的,我想推送到origin/my-branch。为此,我已经设置了以下内容:

  • branch.my-branch.remote = upstream
  • branch.my-branch.merge = main(即,本地分支my-branch跟踪upstream/main)
  • remote.pushDefault = origin
  • branch.my-branch.pushRemote = origin
  • push.default = current(即,更改应推送到origin/my-branch)
  • pull.rebase = true(即,my-branch应通过rebase从upstream/main更新)

由于这些设置的共同影响,本地分支my-branch应基于上游仓库中最新的upstream/main更改进行rebase,并应推送到我的fork中的origin/my-branch(直到最终通过合并请求将其合并到我的fork中的upstream/main)。这个设置在例如Magitedamagit的vscode中运行良好。
然而,“同步更改”按钮却希望同时拉取和推送到upstream/main,这对于这种工作流程是错误的。将分支设置为跟踪origin/my-branch也是错误的,并且会使重新基于最新的上游更改变得更加麻烦。

mctunoxg

mctunoxg4#

它由@kris7t描述,在VScode insider上仍然是一个问题。

6yjfywim

6yjfywim5#

我正在经历这个问题。请告诉我解决方法。

6gpjuf90

6gpjuf906#

仍在经历这个...
即使使用 push.default current

相关问题