289

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

git push

代替:

git push upstream

目前这设置为原始遥控器,我想将其设置为不同的遥控器。

我试图删除原始(克隆)遥控器

git remote rm origin

哪个确实删除了原始遥控器。但不能解决git push问题。我仍然得到:

致命:没有配置推送目的地。
从命令行指定 URL或使用...配置远程存储库

我也试过玩:

git remote set-url --push myfork origin

和其他选项,但似乎都不起作用(可能是因为我太早删除了原始遥控器?)

按照这里的答案,我试图改变:

git config push.default upstream (or matching)

但都没有奏效。

4

14 回答 14

283

您可以使用git push -u <remote_name> <local_branch_name>设置默认上游。有关更多详细信息,请参阅git push 的文档。

于 2013-09-14T11:17:20.067 回答
136

要更改哪个上游远程“连接”到您的分支,请使用git branch带有上游配置标志的命令。

确保遥控器首先存在:

git remote -vv

为当前(签出)分支设置首选远程:

git branch --set-upstream-to <remote-name>

验证分支是否使用正确的上游远程设置:

git branch -vv

于 2013-09-15T19:54:05.360 回答
74

使用 Git 2.3.2 ...

git branch --set-upstream-to myfork/master

现在status,pushpull被指向myfork远程

于 2015-09-09T00:45:26.227 回答
53

您只需使用此命令即可轻松更改分支的默认远程

git push -u <remote_name> --all
于 2016-10-28T09:04:15.770 回答
22

如果你这样做了git push origin -u localBranchName:remoteBranchName,并且在顺序git push命令上,你会得到源不存在的错误,然后按照以下步骤操作:

  1. git remote -v

检查是否有任何我不在乎的遥控器。删除它们git remote remove 'name'

  1. git config --edit

寻找旧的/不存在的遥控器的可能迹象。寻找pushdefault

[remote]
  pushdefault = oldremote

更新oldremote值并保存。

git push现在应该可以工作了。

于 2018-05-16T12:45:06.060 回答
18

查看您的仓库内部可能会有所帮助.git/config,它将列出所有遥控器以及每个分支的默认遥控器

例如。

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@gitea.xxx.be:fii/web2016.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "bugfix/#8302"]
    remote = origin
    merge = "refs/heads/bugfix/#8302"
[branch "feature/#8331"]
    remote = origin
    merge = "refs/heads/feature/#8331"
[remote "scm"]
    url = https://scm.xxx.be/git/web2016bs.git
    fetch = +refs/heads/*:refs/remotes/scm/*

您可以在此文件中进行手动更改以删除不需要的遥控器,或更新您拥有的不同分支的默认遥控器

  • 注意!更改或删除遥控器时,请确保在此配置文件中更新对它的所有引用
于 2019-07-22T15:05:15.943 回答
14

只是一个澄清(在 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]

根据The Official Git Config Documentation,您可以设置默认推送分支(只需在该页面上搜索 remote.pushdefault ),但请记住,这不会影响已经存在的存储库/分支,因此这将起作用但仅对于新的存储库/分支。您应该记住,这--global将设置用户特定的存储库默认值 (~/.gitconfig),--system将设置系统范围的存储库默认值 (/etc/gitconfig),并且没有标志将为当前存储库设置配置选项 (./.gitconfig)。

还应该注意的是push.default配置选项用于配置ref-spec行为,而不是 远程行为。

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

于 2014-01-01T17:43:04.600 回答
9

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

git config remote.origin.url url-to-my-other-remote
于 2013-09-14T11:30:24.627 回答
9

就我而言,我通过以下方式进行了修复: * run git config --edit * 在 git 配置文件中:

[branch "master"]
remote = origin # <--- change the default origin here
于 2019-12-10T20:38:58.187 回答
6

非常简单,将这里的一些很棒的评论与我自己对此的研究拼凑在一起。

首先,检查要绑定到远程分支的本地分支:

git checkout mybranch

下一个:

git branch -u origin/mybranch

在哪里:

git branch -u {remote name}/{branch name}

您应该收到一条消息:

"Branch mybranch set up to track remote branch mybranch from origin."
于 2018-02-22T19:34:15.993 回答
2

在 git 手册页中,您将找到以下内容:

remote.pushDefault
       The remote to push to by default. Overrides branch.<name>.remote for all branches, and is overridden by
       branch.<name>.pushRemote for specific branches.
于 2022-01-05T00:42:58.593 回答
1

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)
于 2020-02-11T21:54:15.453 回答
1

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 ( git push --set-upstream origin task/PLAT-1924-datagrid-tool-panel-scrollbar) 复制建议然后粘贴并运行它,git push -u origin head并且它不需要特定于分支。

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

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

于 2021-03-16T21:13:29.867 回答
0

就像文档说的:

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

于 2021-02-03T20:03:03.870 回答