我有一个工作流程,其中本地分支的名称最终我并不想在远程存储库中显示。我希望在创建本地分支时设置上游名称,这样在使用时就不需要记住这样做了git push
。
我在这里查看了很多问题/答案,并且看到了两条关于设置上游分支名称的建议:
- 使用
git config --local remote.origin.push LOCAL_BRANCH:REMOTE_BRANCH
- 使用
git branch --set-upstream-to REMOTE_BRANCH
- 使用
git push -u
或git push origin LOCAL_BRANCH:REMOTE_BRANCH
第一个“有点工作”,因为如果我推送本地分支,它会推送到预期的远程,但它也会重置该配置条目中的任何现有值,而这是我不想要的。
当远程分支不存在时,第二个不起作用,给我:
fatal: the requested upstream branch 'foobar' does not exist
hint:
hint: If you are planning on basing your work on an upstream
hint: branch that already exists at the remote, you may need to
hint: run "git fetch" to retrieve it.
hint:
hint: If you are planning to push out a new local branch that
hint: will track its remote counterpart, you may want to use
hint: "git push -u" to set the upstream config as you push.
hint: Disable this message with "git config advice.setUpstreamFailure false"
第三个显然不是我想要的,因为我希望这在分支创建时发生。
我尝试推送到一个新的(不同名称的)远程并设置以下条目出现在本地配置中:
branch.foo.remote=origin
branch.foo.upstream=foobar
branch.foo.merge=refs/heads/foobar
但是,如果我删除它们,并使用不同的名称手动重新创建它们,当我推送它(没有-u
)时,它只想使用本地分支名称。
所以我开始认为实际上没有好的方法来做到这一点。
再次重申一下,我想要的是:
一种配置新本地分支的方法,使其在首次推送时具有不同的远程分支名称,而无需在首次推送时明确设置该名称
这可能吗?
编辑:事实证明,虽然给出的答案适用于命令行 git,但它似乎不适用于 IntelliJ(也许 IntelliJ 缓存了 git 配置信息?)。
在首次推送成功之前,您可以随时设置上游分支名称。使用核心命令绕过安全检查,这些便利措施会帮您检查可能的拼写错误等等,您只是自己处理事情而已。所以,用问题中的例子来说
给出
test
上游及其分支名称,而不检查它们是否已经设置。ps 查看文档
push.default
:Git 通常默认使用本地名称的分支,要让它默认使用不同的已配置名称,您还必须要求将其作为upstream
默认值。