我想改变Git的默认远程分支目标,这样我就可以

git push

而不是:

git push upstream

目前,这是设置为原始远程,我想将其设置为不同的远程。

我试图删除原(克隆)远程

git remote rm origin

把原来的遥控器弄掉了。但不能解决git推送的问题。我仍然得到:

fatal:没有配置推送目标。对象中指定URL 命令行或配置远程存储库使用…

我还试着玩:

git remote set-url --push myfork origin

和其他选项,但似乎没有工作(可能是因为我删除了起源远程太快?)

下面的答案我试着改变:

git config push.default upstream (or matching)

但这两种方法都不奏效。


当前回答

Git remote set-url——push origin应该可以工作,正如你提到的,但你需要显式地提供url,而不是一个替代的远程名称,例如。

git remote set-url --push origin git@github.com:contributor/repo.git

您可以通过执行git remote -v来确认这是否有效。如。

λ ~/go/src/github.com/stretchr/testify/ master git remote -v
fork    git@github.com:contributor/testify.git (fetch)
fork    git@github.com:contributor/testify.git (push)
origin  git@github.com:stretchr/testify (fetch)
origin  git@github.com:contributor/testify.git (push)

其他回答

只是澄清一下(在ubuntu 12.04上使用git 1.7.9.5版本):

Git将添加/删除遥控器。这些是带有服务器的git远程实例。

git remote add myremote git://remoteurl

然后你可以像这样获取git存储库:

git fetch myremote

这似乎创建了一个名为“myremote”的分支,但是分支的远程并没有自动设置。要做到这一点,你必须做到以下几点:

首先,验证您是否有这个问题,即。

git config -l | grep myremote

你会看到如下内容:

remote.myremote.url=git://remoteurl
remote.myremote.fetch=+refs/heads/*:refs/remotes/myremote/*
branch.myremote.remote=.
branch.myremote.merge=refs/heads/master

如果看到branch.myremote.remote=。,那么你应该继续:

git config branch.myremote.remote myremote
git checkout myremote
git pull

您现在应该与远程存储库保持一致,您的拉/推操作应该绑定到适当的远程。您可以以这种方式在每个分支切换遥控器。[注][1]

According to a The Official Git Config Documentation, you can set up a default push branch (just search remote.pushdefault on that page), however keep in mind that this will not affect repositories/branches which already exist, so this will work but only for new repositories/branches. You should remember that --global will set user-specific repository defaults (~/.gitconfig), --system will set system-wide repository defaults (/etc/gitconfig), and no flag will set configuration options for the current repository (./.gitconfig).

另外需要注意的是,push.default配置选项用于配置ref-spec行为,而不是远程行为。

[1]: git branch——set-upstream myotherremote通常在这里工作,但是git会抱怨如果git branch——set-upstream myremote被使用,它将不会将一个分支设置为自己的远程。然而,我认为这是不正确的行为。

在git的手册中,你会发现以下内容:

remote.pushDefault 默认情况下要推到的遥控器。覆盖分支。<名称>。所有分支的远程,并被分支覆盖。用于指定分支的pushRemote。

就像医生说的:

当命令行没有使用<repository>参数指定推入位置时,请使用branch.*。参考当前分支的远程配置来确定推送位置。如果缺少配置,则默认为origin。

git push -u origin head是我正在寻找的。


以下是它为我解决的问题:

fatal: The current branch task/PLAT-1924-datagrid-tool-panel-scrollbar has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin task/PLAT-1924-datagrid-tool-panel-scrollbar

➜  frontend git:(task/PLAT-1924-datagrid-tool-panel-scrollbar) git push -u origin head

我可以使用键盘快捷键或别名来输入Git push -u origin head,而不是使用我的鼠标向上复制Git的建议(Git push -set-upstream origin task/PLAT-1924-datagrid-tool-panel-scrollbar),然后粘贴并运行它,它不需要是分支特定的。

更新:奇怪的是,今天我得到了这个错误。在上面的命令中将小写字母改为大写字母就解决了这个问题。

感谢https://stackoverflow.com/a/23402125/470749。

我刚刚发现的另一个解决这个问题的技术(即使我先删除了origin,这似乎是一个错误)是直接操纵git配置:

git config remote.origin.url url-to-my-other-remote