更改Git远程'push到'默认的

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

git push

而不是:

git push upstream

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

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

git remote rm origin

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

fatal:没有配置推送目标。从
指定URL 命令行或使用…

配置远程存储库

我还试着玩:

git remote set-url --push myfork origin

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

下面的答案我试图改变:

git config push.default upstream (or matching)

但这两种方法都不奏效。

195988 次浏览

你可以使用git push -u <remote_name> <local_branch_name>来设置默认的上游。更多细节请参见git推送的文档

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

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

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

首先确保远程存在:

git remote -vv

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

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

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

git branch -vv

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

根据a Git官方配置文档,你可以设置一个默认的推送分支(只需要搜索remote。但是请记住,这不会影响已经存在的存储库/分支,所以这只会对新的存储库/分支起作用。你应该记住--global将设置用户特定的存储库默认值(~/.gitconfig), --system将设置系统范围的存储库默认值(/etc/gitconfig),没有标志将设置当前存储库的配置选项(./.gitconfig)。

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

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

使用Git 2.3.2…

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

现在statuspushpull指向myfork远程

您可以简单地使用这个命令一次性更改分支的默认远程

git push -u <remote_name> --all

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

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

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."

如果你连续执行git push origin -u localBranchName:remoteBranchName和on git push命令,你会得到错误,然后原点不存在,然后执行以下步骤:

  1. git remote -v

检查是否有我不在乎的遥控器。 用git remote remove 'name'

删除它们
  1. git config --edit
寻找旧的或不存在的遥控器的可能迹象。 查找pushdefault:

[remote]
pushdefault = oldremote

更新oldremote值并保存。

git push现在应该工作了。

在你的repo中查看.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/*

您可以对该文件进行手动更改,以删除不需要的远程,或者更新您拥有的不同分支的默认远程

  • 注意!当更改或删除遥控器时,请确保在这个配置文件中更新对它的所有引用
在我的情况下,我通过以下方法修复: *运行git config --edit *在git配置文件中:

[branch "master"]
remote = origin # <--- change the default origin here

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)

文档这样说:

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

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)中复制建议,然后粘贴并运行它,而且它不需要是特定于分支的。

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

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

Git手册页中,你会发现以下内容:

< p > remote.pushDefault
默认情况下要推到的遥控器。对于所有分支覆盖branch.<name>.remote,对于特定分支被branch.<name>.pushRemote覆盖