如何设置当前分支 (dev) 以仅推送 git 推送到 refs/remotes/test?

How to setup current branch (dev) to push to refs/remotes/test with git push only?

我已经将当前分支 dev 设置为使用以下 git push --set-upstream origin dev:test 推送到 refs/remotes/test

.git/config 看起来像:

[remote "origin"]
    url = https://appulocal@bitbucket.org/appulocal/test_st.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "dev"]
    remote = origin
    merge = refs/heads/test

但是当我执行 git push 时,它不会从本地 dev 推送到远程 test。 Git bash 显示消息:

fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:test

To push to the branch of the same name on the remote, use

    git push origin dev

To choose either option permanently, see push.default in 'git help config'.

如何解决这个问题,以便仅在执行 git push 时我当前的分支 dev 推送到远程 test

实际上您已经设置 dev refs/remotes/test 拉取。这就是分支的 merge 选项所支配的。这有点令人困惑,因为这是使用 push 命令设置的;但是一组不同的配置选项决定了推送的行为方式。

事实是,git 会检查很多事情来决定如何处理推送,而我们大多数人习惯的行为是 none 时的默认行为set... but git 如果分支名称不匹配,则不愿意依赖该默认值,因为它认为这在您可能是两种不同的配置之间是模棱两可的正在尝试使用。

在您的情况下,您想为 dev 分支指定 test 的推送目的地。有几种方法可以解决这个问题,但我想不出任何方法在您处于 不同[=] 时没有 一些 副作用37=]分支说git push.

假设您只推送到一个遥控器 - 并且它是您从中拉出的同一遥控器 - 您可以设置 push.default 配置值

git config push.default upstream

这将删除 "same name" 检查。 (请注意,它删除了对 所有分支 的检查;但只要您打算始终推送到您在 pull 期间合并的任何分支,就可以了。)官方文档认为这仅适用于单远程工作流。

如果您想更精确地指定将内容推送到何处,您可能只需要在推送命令行上指定 refspecs。