在Git中推送提交时出现“src refspec master does not match any”消息

4038

我使用以下命令克隆我的存储库:

git clone ssh://xxxxx/xx.git 

但是在我修改了一些文件并addcommit之后,我想将它们推送到服务器:

git add xxx.php
git commit -m "TEST"
git push origin master

但我收到的错误是:

error: src refspec master does not match any.  
error: failed to push some refs to 'ssh://xxxxx.com/project.git'

71
@Marco 这不是重复的问题。那个问题非常具体,是关于将本地分支推送到远程分支的问题。而这个问题是关于初始化存储库并将其推送的问题。它们产生了相同的错误,但是产生该错误的原因和解决方法完全不同。此外,sinoohe,你应该接受一个答案。可能是第一个答案,因为它回答了问题并帮助了超过350人。 - tandrewnichols
4
希望这篇文章能对某个人有所帮助 - http://samranga.blogspot.com/2015/07/create-git-bitbucket-repository-from.html?view=sidebar。即使尝试从本地已存在的项目创建git BitBucket存储库时,问题也可能会出现错误。 - Samitha Chathuranga
47
Git又把一个简单的任务搞得很复杂。Git的开发者应该将Stack Overflow作为他们的SDLC反馈环节。超过850,000人的使用应该表明Git的工作流程有严重问题。他们需要聘请一个用户体验专家,因为他们显然无法自己解决这个问题。 - jww
12
如果您没有使用点号或某些文件添加git add,也会出现这个错误。 - Blasanka
34
最近 Github/Git 不再默认使用 "master" 分支,而是改为使用 "main" 分支,因此这可能是导致此错误的原因。 - Harini Sj
显示剩余17条评论
140个回答

5718
也许你只需要提交。我在执行以下操作时遇到了这个问题:
mkdir repo && cd repo
git init
git remote add origin /path/to/origin.git
git add .

糟糕!从未提交过!

git push -u origin master
error: src refspec master does not match any.

我所要做的就是:

git commit -m "initial commit"
git push origin main

成功!


186
不要盲目地按照这个步骤操作,看看 @Vi 提到的内容,然后修改您的推送命令以更正引用。 - Kumar
81
出现这个错误的最可能原因是所有文件都未被追踪或添加。如果你想要添加所有文件,则可以使用命令git add --all。或者,你也可以选择性地添加文件。然后使用命令git commit -m "Initial comment"git push origin master。这样做肯定会有效。 - Bhanu Pratap Singh
6
修复了不同的问题,这很好,但并不是对于这个实际问题的答案。 - Michael Durrant
9
在Windows系统中,应该使用双引号"而不是单引号'来包裹git commit -m 'initial commit'。正确的写法是:git commit -m "initial commit" - dance2die
45
可能的另一个原因是:实际上您没有名为master的分支。 - CarlosAS
显示剩余27条评论

1753
  1. 尝试使用git show-ref命令查看你有哪些引用。是否存在refs/heads/master

由于最近在GitHub中“将主分支更名为main”的操作,你可能会注意到存在refs/heads/main。因此,以下命令可能从git push origin HEAD:master更改为git push origin HEAD:main

  1. 你可以尝试使用git push origin HEAD:master作为更加本地引用无关的解决方案。这明确表示你想将本地引用HEAD推送到远程引用master(参见git-push refspec文档)。

7
我的主分支不在提交记录的最新位置!因此,我创建了一个分支,使其位于所有分支的末尾,并将它们推送到服务器上。 - sinoohe
12
创建并切换到名为testbranch的新分支:git checkout -b testbranch;将testbranch分支推送到远程仓库origin的master分支上:git push origin testbranch:master。 - sinoohe
172
“git show-ref” 显示了我的分支;对我而言,“git push origin HEAD:<branch>” 是可行的。 - Glen Solsberry
14
谢谢你的夸奖。你刚才用的命令是git push origin HEAD:master,帮了我大忙了。但是为什么像git push --force origin master这样的命令行不起作用呢? - shkschneider
20
现在master已经更名为main - Aaditya Ura
显示剩余17条评论

282

在我将本地计算机上的所有文件删除后,我也遇到了类似的错误,我不得不清理存储库中的所有文件。

我的错误信息大致是这样的:

error: src refspec master does not match any.
error: failed to push some refs to 'git@github ... .git'

通过执行以下命令解决了该问题:

touch README
git add README

git add (all other files)
git commit -m 'reinitialized files'
git push origin master --force  # <- caution, --force can delete others work.

18
其他答案没有解决我遇到的问题(例如,我已经提交了但仍然出现错误),但使用 git push origin BRANCH --force 解决了。谢谢! - Lemmings19
请参考此前的回答。我怀疑您需要添加一个文件,因为git不会跟踪空目录。 - user456814
4
“push --force”可能会完全摧毁同事们辛苦工作的成果。因此需要加上警告提示。 - Michael Durrant
4
这解决了我的问题。我想是 git add 命令做到了这点。最初推送时,Git 无法识别文件,可能是这导致了问题。git add 命令解决了我的问题。此后,我能够在不使用 --force 的情况下进行推送。谢谢 Aryo。 - Anandaraja_Srinivasan

152
git push -u origin master
error: src refspec master does not match any.

你需要输入以下提交信息,然后推送代码:

git commit -m "initial commit"

git push origin master

成功推送到主分支。


我已经检查过了,它可以正常工作。请忽略 -u 选项,然后再试一下。 - VIKAS KOHLI
这里的问题似乎与原帖完全不同...但是许多人,包括我自己,都遇到了这个问题。 - ZX9

140

对于我来说,我必须确保公钥在服务器上得到正确配置(附加在~/.ssh/authorized_keys中),并且在GitHub/Bitbucket 中(将其添加到我的GitHub 或 Bitbucket SSH密钥) - 它们需要匹配。然后:

git add --all :/
git commit -am 'message'
git push -u origin master

127
这是我在一个全新的代码库中发生的事情,之前我只运行了git add添加了一个空目录。
一旦我添加了一个文件(比如git add README.md),然后git push就正常工作了。

9
这可能有效是因为Git实际上只跟踪文件,而不是目录。因此,如果一个目录是空的,Git并不会真正地添加它。 - user456814
1
OP添加了一个文件(xx.php),所以在这种情况下这不是问题,尽管在其他情况下这可能是一个问题,并且添加一个文件可以解决那个问题。 - Michael Durrant
1
这是一个非常简单的解决方案,解决了令人沮丧的问题。我正在测试创建和克隆存储库,并创建了空目录而不是文件。 - James Wierzba
1
8年后,这个帮了我省去了一些麻烦! - rvictordelta
是的,这是一个打字错误。谢谢。 - Kodali444
显示剩余2条评论

81

如果缺少或跳过git add .git commit,可能会导致此错误:

git push -u origin master
Username for 'https://github.com': yourusername
Password for 'https://yourusername@github.com': 
error: src refspec master does not match any.
error: failed to push some refs to 'https://github.com/yourusername/foobar.git'

要修复它,重新初始化并按正确的序列进行操作:

git init
git add .
git commit -m 'message'
git *create remote
git push -u origin master

没错,业务端更具体地说是 git remote add __REMOTE_NAME__ __URL_OR_SSH__,而上面的远程名称是“origin”。 - aug2uag
1
他们在问题中添加并提交了,所以这不是问题,尽管这有助于其他人。 - Michael Durrant
这个答案确实有效,但是由于使用了“-u”选项,所以才成功。 - Michael Durrant
什么是 git *create remote - Lucas

73

为了修复它,请重新初始化并按照正确的代码顺序进行操作:

git init
git add .
git commit -m 'message'
git push -u origin master

67

当你处于特定分支并尝试推送另一个尚不存在的分支时,也会出现这种情况,例如:

$ git branch
* version-x  # you are in this branch
  version-y

$ git push -u origin master
error: src refspec master does not match any.
error: failed to push some refs to 'origin_address'

4
我尝试将代码推送到主分支(origin master),但是该分支不存在。实际上它被称为origin stable。我需要翻译的内容已经完成了,没有额外信息可提供。 - penner
1
-u 可能会有所帮助。 - Michael Durrant
3
在上述情况下,问题当然是没有本地分支master,所以您无法将其推送。您可以推送现有分支,或者像这样创建主分支并将其推送:git checkout -b master; git push -u origin master; - tanius
4
我刚才拼错了分支名称,结果出现了这个。 - Sebastian Ärleryd
2
我的本地分支被拼成了"sheduler",而我正在执行git push origin scheduler。哈哈!在编程中错一个字母就会害死你。lol - protoEvangelion
显示剩余2条评论

66

面临的问题

当我在GitHub上创建一个新的仓库并将其与我拥有的客户端计算机中的React应用程序链接时,我遇到了相同的问题。

我使用了以下步骤:

问题出现前使用的命令

git init
git commit -m "first commit"
git branch -M main
git remote add origin "_git repository link here_"
git push -u origin main

我的错误

但是你可以看到,我的错误在于没有使用git add .命令。我犯了这个错误,因为我已经有了README.md文件,并且GitHub在创建存储库时向我们介绍了基本命令。

我的解决方案

我的解决方案是在git init命令后使用git add .

按照以下命令集以相同的顺序来解决问题:

git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin "_git repository link here_"
git push -u origin main

5
执行命令git add .,然后执行git commit -m "first commit",再次进行推送。 - Stefan
3
"git branch -M main" 对我有效。 - Tora Tora Tora
1
这个 git branch -M main 很重要,所以它对我不起作用。如果你什么都不输入,它会期望 master - Panama Jack

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