当签出新分支 ( git checkout -b $BRANCH
) 时,我经常想使用相同的分支名称将其推送到特定的远程。我有两个远程,一个名为“origin”,一个名为“mine”。当我想将这样的新分支推送到“mine”时,我只需执行
$ git push -u mine
这会将分支推送至refs/heads/$BRANCH
远程“矿场”并开始跟踪它。
然而,同样的事情对于“origin”遥控器却不起作用:
$ git push -u origin
fatal: The current branch $BRANCH has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin $BRANCH
(git push -u origin $BRANCH
正如输出所示,使用当然可以正常工作,但我不想重复分支名称,因为我可能会输入错误。)
为什么一个遥控器与另一个遥控器的处理方式不同?
我的配置文件中的相关片段:
[remote "origin"]
url = ssh://git@server:/path/to/public/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
fetch = +refs/pull-requests/*/from:refs/remotes/origin/pr/*
[remote "mine"]
url = ssh://git@server:/path/to/my/repo.git
fetch = +refs/heads/*:refs/remotes/mine/*
fetch = +refs/pull-requests/*/from:refs/remotes/mine/pr/*
如您所见,这些配置看起来相同(经过适当修改),但产生的行为却大不相同。名称“origin”是否有些特殊,还是我需要查看其他配置?
我正在使用 git 版本 2.7.0。
答案1
跟踪分支有一个远程分支和一个关联的远程分支 - 查看 .git/config 中的分支(branch.*.remote
和branch.*.merge
)。如果您的分支是远程分支,则远程分支是“我的”。
看看push.default
git-config(1)
- 默认行为(simple
)是仅当两个分支具有相同名称时才将当前分支推送到远程分支和分支的远程。