致命错误: 'origin' 似乎不是一个git仓库

138
我在我的Github账户上有一个名为moodle的代码库,我从官方代码库中进行了fork
然后我在本地机器上克隆了它,一切正常。我在master分支下创建了几个分支,并进行了许多提交,一切正常。
但是当我执行git push origin master时,不知道为什么出现了以下错误。
fatal: 'origin' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

我如何在不影响Github上的存储库的情况下解决错误?

我正在使用Ubuntu 12.10

执行cat $(git rev-parse --show-toplevel)/.git/config后,我的.git/config的内容是:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[branch "master"]
[branch "MOODLE_23_STABLE"]
[branch "MOODLE_24_STABLE"]
[remote "upstream"]
    url = git://git.moodle.org/moodle.git
    fetch = +refs/heads/*:refs/remotes/upstream/*

请打印 .git/config 的内容并在此处添加。 - pmod
本地机器上克隆的文件夹应包含.git文件夹。 - pmod
@xan cat $(git rev-parse --show-toplevel)/.git/config 请将上述代码翻译为中文。 - bereal
@pmod:是的,我找到了。请看我的更新后的问题。 - xan
12个回答

157

$HOME/.gitconfig是Git的全局配置文件。
三个级别配置文件

 cat $(git rev-parse --show-toplevel)/.git/config
(被提及 by bereal) 是你的本地配置,与你克隆的仓库相关。
你还可以在你的仓库内输入:
git remote -v

查看其中是否列出了名为“origin”的远程仓库。

如果没有,默认情况下会创建该远程仓库,如果缺失,您可以再次添加它:

git remote add origin url/to/your/fork

楼主提到:

运行git remote -v的结果为:

upstream git://git.moodle.org/moodle.git (fetch) 
upstream git://git.moodle.org/moodle.git (push)

'origin'缺失:对你的分支的引用。
请参见"GitHub中'origin'和'upstream'有什么区别?"

enter image description here


执行 git remote -v 命令会得到以下结果:upstream git://git.moodle.org/moodle.git (fetch) upstream git://git.moodle.org/moodle.git (push) - xan
1
@xan,“upstream”是您分叉的存储库。您缺少“origin”,这是您在Github上的分叉。请参见https://dev59.com/oHDXa4cB1Zd3GeqP8yK1#15632224和https://dev59.com/1Wox5IYBdhLWcg3wWjHQ#9257901。 - VonC
如何将我的 fork 更改为 master? - Wolfpack'08
@Wolfpack'08,“fork”指的是一个带有多个分支的代码库。切换到分支是一项本地操作,需要使用git switch命令:https://dev59.com/X2Af5IYBdhLWcg3wsUXT#57066202。用你自己的话来说,“将fork更改为master”对你意味着什么?是将你在本地克隆的远程GitHub fork代码库中的本地分支更改为主分支吗? - VonC
1
如果您拥有远程仓库ghy,只需将其推送到该仓库:git push -u ghy master - VonC
谢谢。我发现了我犯的各种错误以及我对Git的错误理解。我犯了一些命名错误,避免使用克隆,并做了一些其他愚蠢的事情。 - Wolfpack'08

31

当我在GitHub上重命名我的存储库时,我遇到了相同的问题。我尝试进行推送,但此时出现了错误。

fatal: 'origin' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

我必须使用以下方式更改URL:

git remote set-url origin ssh://git@github.com/username/newRepoName.git

之后所有的命令都正常工作了。您可以使用

检查更改。
git remote -v

在我的情况下,成功更改后,URL中显示了正确的重命名存储库。

[aniket@alok Android]$ git remote -v
origin  ssh://git@github.com/aniket91/TicTacToe.git (fetch)
origin  ssh://git@github.com/aniket91/TicTacToe.git (push)

"致命错误:没有名为'origin'的远程仓库" - MwBakker
@MwBakker 首先你需要使用 "git remote add origin ssh://git@github.com/username/newRepoName.git" 命令添加远程仓库,然后可以使用 "git remote -v" 命令来检查。 - buck80

18

有可能你尝试拉取的另一个分支与当前不同步;因此,在添加和删除远程之前,请尝试同步一下(如果你想从主分支中拉取)。

git pull origin master

对我来说,这个简单的调用解决了以下错误信息:

  • fatal:'master' 不是一个 git 仓库
  • fatal:无法从远程仓库读取。
git remote add origin

6

我曾经也遇到过同样的问题,通过检查得以解决。

git remote -v

git init the repo URL

git remote add origin the repo URL

git push -f origin master

这个答案有什么新的内容?上面提到了git remote add... - Christoph

6

尝试先创建远程 origin,也许是因为您更改了远程仓库的名称而导致缺失

git remote add origin URL_TO_YOUR_REPO


2
我的问题与我克隆仓库的方式有关。Github在用户名前添加了一个冒号,例如:
git@github.companyname.com:usernmame/reponame.git

执行命令git remote -v,显示如下结果:

origin git@github.companyname.com:usernmame/reponame.git (fetch)
origin git@github.companyname.com:usernmame/reponame.git (push)

所有的内容都与Github提供的信息相符,但是当我试图向上游推送一个新分支时却遇到了以下错误,让我感到困惑:

fatal: 'reponame' does not appear to be a git repository

后来我意识到,由于URL中的冒号,我的起源指向了错误的上游。

git remote set-url origin ssh://git@github.companyname.com/username/reponame.git

现在我可以推送新分支。
更新:
我发现在这样做之后,我无法再推送任何更改。我必须将源重置回带有冒号的URL,以便推送工作。
git remote set-url origin git@github.companyname.com:usernmame/reponame.git

我认为这只是一种权宜之计,而不是一个正式的解决方案。


2
这并没有回答你的问题,但我遇到了类似的错误信息,但原因不同。允许我发帖以便收集信息。
我的 git 存储库在网络驱动器上。我们把这个网络驱动器叫做 RAID。我把这个仓库克隆到了本地机器(LOCAL)和我的计算机集群(CRUNCHER)。为了方便起见,我挂载了 CRUNCHER 上的我的账户用户目录到了我的本地机器上。因此,我可以在 CRUNCHER 上操作文件而不需要在 SSH 终端中进行工作。
今天,我通过我的本地机器在 CRUNCHER 上修改了仓库中的文件。在某个时刻,我决定提交这些文件,所以我做了一次提交操作。添加修改过的文件和进行提交操作都按照我预期的方式进行了,但是当我调用 git push 时,我得到了一个与问题中发布的类似的错误消息。
原因是,我从 CRUNCHER 上的本地仓库中调用了 push。因此,配置文件中的所有路径都是错误的。
当我意识到我的错误后,我通过终端登录到了 CRUNCHER 并成功推送了提交。
如果我的解释无法理解或者您觉得我的帖子多余,请随意评论。

2

100%可行。

首先,请确保项目根目录中没有隐藏的git文件夹,如果有,请删除它。然后打开命令行并执行以下命令:

git init -b main

git add .   //This is very important and it adds the files in the local repository and stages them for commit.

git commit -m "First commit"

git remote add origin  <REMOTE_URL>  //REMOTE_URL: the repository address in github.com 

git remote -v  //Verifies the new remote URL

git push origin main

就是这样。您也可以在GitHub文档中阅读更多相关内容。


1

当我将远程 origin 设置为路径 fs 而不是 ssh.git/config 中时,使用 git pull origin branchname 时出现了相同的错误:

fatal: '/path/to/repo.git' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly

这个只适用于在同一台服务器上且有git访问权限的用户:

url = file:///path/to/repo.git/

按如下方式进行修复(适用于所有具有访问权限的用户,包括git用户(ssh授权密钥或密码)):

url = git@domain.com:path/to/repo.git

我把它作为目录路径的原因是因为git文件在同一台服务器上。

确实!如果使用SSH,则域名后面的“/”必须是“:”。只需通过“git remote -v”进行验证即可。 - Noam Manos

0

对我来说,这是WSL中的RAM问题。我不得不重新启动WSL才能使它再次工作。在命令提示符中:

wsl --shutdown

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