GitHub报错:"fatal:远程仓库已存在"

642

我想跟随Michael Hartl的Rails教程,但遇到了一个错误。

我在GitHub注册了账户,生成了一个新的SSH密钥,并创建了一个新的代码库。但当我在终端中输入下一行命令时,出现了以下错误:

Parkers-MacBook-Pro:.ssh ppreyer$ git remote add origin git@github.com:ppreyer/first_app.git
fatal: remote origin already exists.

想知道是否有其他人遇到过这个问题?


1
如果你还没有创建git仓库,请查看.git/config文件,看看是否尚未声明origin。 - Denys Séguret
30
我曾遇到同样的问题,使用命令 "git remote rm origin" 删除原始远程仓库,然后使用命令 "git remote add origin URL" 添加新的远程仓库地址。 - Akhzar Nazir
@AkhzarNazir 请将此作为答案添加。这对我有用。 - Pamela Sillah
我移除了我的双重认证,然后它对我起作用了。 - Suraj
26个回答

1208

简短版本:

你只需要更新现有的远程:

git remote set-url origin git@github.com:ppreyer/first_app.git

长版本:

正如错误信息所指示的那样,已经有一个使用相同名称的远程配置。因此,您可以选择使用不同的名称添加新的远程配置,或者如果您不需要它,更新现有的远程配置。

要添加一个名为github的新远程配置(而不是已经存在于您的系统中的origin),请按照以下步骤进行:

git remote add github git@github.com:ppreyer/first_app.git

记住,无论在教程中你看到什么地方有"origin",你都应该将其替换为"github"。例如,$ git push origin master现在应该是$ git push github master
然而,如果你想查看已经存在的origin远程仓库,你可以执行$ git remote -v命令。如果你认为这是某种错误导致的,你可以像下面这样更新它:
git remote set-url origin git@github.com:ppreyer/first_app.git

6
他的新代码库为什么会存在“origin”?他应该解决这个问题(例如确保“origin”是正确的github别名),而不是创建一个新的别名,这样他就必须记住它。 - Denys Séguret
1
好的,那个可行,但是当我进行下一步并在终端输入git push -u origin master时,我收到以下错误:ERROR: Repository not found. fatal: The remote end hung up unexpectedly。这是什么意思? - ppreyer
1
git remote -v 输出什么?另外,你能试一下 git push origin master 吗? - Agis
16
git remote rm origin 没有完全生效。它产生了一个错误:无法删除配置部分“remote.origin”。 - Andrew Savinykh
20
使用 git remote set-url --add origin git@github.com/username/repo.git 命令可以添加远程仓库的地址。 - eduncan911
@DenysSéguret 他本可以添加一个带基本身份验证的 https,但最终决定通过 SSH 路径,这将有效地创建一个“起源”,即使身份验证失败。 - jave.web

482

这个有效:

git remote rm origin
git remote add origin git@github.com:username/myapp.git

有人能解释一下吗?git remote rm origin - Kick Buttowski
1
@KickButtowski rm是指*nix中使用的删除命令。因此,该命令告诉git“删除”名为“origin”的远程服务器详细信息。 - rob
不需要分两步骤,可以一步完成。请看我的答案。 - Agis

57

首先要做的是:

git remote rm origin

那么。
git remote add origin https://github.com/your_user/your_app.git

然后瞧!对我起作用了!


为什么要删除 origin?我们有没有办法添加其他东西来代替 origin? - Abhils
git remote rename [当前名称] [新名称] - Raushan Kumar

41

你可以通过以下方式查看你已经配置连接到的远程代码库:

git remote -v

这将以以下格式返回一个列表:

origin  git@github.com:github/git-reference.git (fetch)
origin  git@github.com:github/git-reference.git (push)

这可能帮助您弄清原始“origin”指向的内容。

如果您想保留使用-v看到的远程连接,但仍想按照Rails教程的步骤操作,而不必记住您所选教程中存储库的名称(例如github或其他名称),您可以使用以下命令将其他存储库重命名:

git remote rename [current name] [new name]

就像这样:

git remote rename origin oldrepo
你应该能够继续你的教程。

然后你应该能够继续你的教程。


37

如果你遇到了“fatal: remote origin already exists.”这个错误,或者在尝试删除origin时遇到了“error: could not remove config section remote.origin”错误,那么你需要手动设置origin。

Windows的POSH~Git for Windows PowerShell(以及GitHub for Windows应用程序)存在此问题。

就像我经常做的那样,当我设置我的octopress时,我再次遇到了这个问题。下面是我是如何解决它的:

首先,请检查你的远程仓库:

C:\gd\code\octopress [source +2 ~3 -0 !]> git remote -v
octopress       https://github.com/imathis/octopress.git (fetch)
octopress       https://github.com/imathis/octopress.git (push)
origin

首先要注意我的来源没有网址。任何试图删除、重命名或其他操作都会失败。

因此,需要手动更改网址:

git remote set-url --add origin https://github.com/eduncan911/eduncan911.github.io.git

然后您可以通过再次运行git remote -v来确认它是否起作用:

C:\gd\code\octopress [source +2 ~3 -0 !]> git remote -v
octopress       https://github.com/imathis/octopress.git (fetch)
octopress       https://github.com/imathis/octopress.git (push)
origin  https://github.com/eduncan911/eduncan911.github.io.git (fetch)
origin  https://github.com/eduncan911/eduncan911.github.io.git (push)

这已经修复了我遇到的数十个 git 存储库的问题,包括 GitHub、BitBucket、GitLab 等。


2
这对我有用。感谢@eduncan911。Github的说明指出要在命令行上执行“git init”以创建新存储库。这将使用该PS接口创建一个没有URL的origin远程。 - mikekidder
啊呀,这是另一个需要你这样做的问题。+1 或许我们应该将此报告给 GitHub 上的 POSH Git。 - eduncan911
当我使用GitLab时,如何找到URL? - Madmenyo
1
@MennoGouw 我认为这是一个离题的问题;但通常在Repo的仪表板/主页上。它也在项目的设置中。 - eduncan911

33

如果你是从一个旧的作为模板使用过的仓库创建新仓库(如果这不是你的情况,请勿这样做),则需要完全删除旧仓库的git文件,以便开始一个新的仓库:

rm -rf .git

然后像往常一样重新初始化一个新的 git 代码库:

git init
git add whatever.wvr ("git add --all" if you want to add all files)
git commit -m "first commit"
git remote add origin git@github.com:ppreyer/first_app.git
git push -u origin master

24

如果原始文件已经存在,使用此命令更新原始文件

git remote set-url origin https://github.com/SriramUmapathy/ReduxLearning.git

谢谢。你帮我省了很多时间。 - Geo Mukkath

15

如果您需要检查已连接到本地仓库的远程仓库,请使用以下命令:

git remote -v

现在如果您想删除远程仓库(比如说,origin),则可以执行以下操作:

git remote rm origin

这更像是一条评论而不是答案。再多一点声望,您就可以发布评论了。 - Nathan Tuggy
1
@NathanTuggy 不,这是一个完整的答案,并且在我谦虚的意见中,比这个线程上最受欢迎的回答更直接。 - daOnlyBG
@daOnlyBG:我不确定我看到答案时它是什么样子的,因为那是在评论锁定宽限期之前(因此可能已被默默编辑)。但现在,我认为它已经相当完整了。 - Nathan Tuggy
@NathanTuggy 哇,我不知道以前还有静默编辑。这就解释了。 - daOnlyBG

13

在远程推送代码时我遇到了 Bitbucket 的问题。

请按照以下步骤操作:

步骤一:更新现有的远程代码库

git remote set-url origin https://pratik@bitbucket.org/pratik/demoapp.git

步骤二:使用此命令可以强制服务器使用本地存储库的更改。远程存储库代码将被替换为您的本地存储库代码。

git push -f origin master

-f通常情况下,该命令不会更新一个远程引用,如果该引用不是被用来覆盖它的本地引用的祖先。


9

remote这个概念就是你远程仓库的URL。

origin是指向该URL的别名。因此,我们不必每次想推送内容到我们的仓库时都要写完整的URL,只需使用此别名并运行:

git push -u origin master

告诉Git将我们的代码从本地master分支推送到remote origin仓库中。

无论何时我们克隆一个仓库,Git都会默认为我们创建此别名。同时,我们自己创建一个新仓库时也可以自己设置别名。

无论什么情况,我们总是可以通过运行以下命令将此名称更改为任何喜欢的名称:

git remote rename [current-name] [new-name]

由于存储在客户端的git应用程序(我们的计算机)上,更改它不会影响我们的开发过程,也不会影响我们的远程代码库。请记住,它只是指向一个地址的名称

通过重新命名别名唯一要改变的事情就是每次我们推送到仓库时都需要声明这个新名称

git push -u my-remote-alias master

显然,单个名称不能指向两个不同的地址。这就是为什么你会收到此错误消息的原因。在本地计算机上已经有一个名为origin的别名。要查看您有多少个别名以及它们是什么,请执行以下命令:

git remote -v

这将显示您所有的别名以及相应的网址。
如果您想删除它们,可以运行以下命令:
git remote rm my-remote-alias

简而言之:

  • 找出您已经拥有的内容,
  • 删除或重命名它们,
  • 添加您的新别名。

愉快编码。


非常详细的解释!正是我在寻找的。在我看来,这个答案被低估了。 - yoma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接