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

Posted

技术标签:

【中文标题】Git:在 Git 中推送提交时消息“src refspec master does not match any”【英文标题】:Git: Message 'src refspec master does not match any' when pushing commits in Git 【发布时间】:2022-01-08 07:43:08 【问题描述】:

我克隆我的存储库:

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'

【问题讨论】:

@Marco 这不是重复的。那是关于将本地分支推送到远程分支的一个非常具体的问题。这个是关于初始化一个 repo 并将其推上去的。它们产生相同的错误,但产生该错误的原因和修复完全不同。另外,sinoohe,您应该接受一个答案。可能是第一个,因为它回答了问题并帮助了 350 多人。 希望这篇文章对某人有用-samranga.blogspot.com/2015/07/… 即使尝试从本地已经存在的项目创建 git BitBucket 存储库,也会弹出问题中的错误 又一个简单的任务被 Git 搞定了。 Git 开发人员应该在他们的 SDLC 循环中使用 Stack Overflow 作为反馈。超过 850,000 人应该指出 Git 的工作流程存在严重问题。他们需要聘请 UX 专家,因为他们显然无法靠自己的方式正确完成。 如果你没有用点或一些文件添加git add,也会出现这个错误。 最近 Github/Git 没有默认的“master”分支。 “master”已更改为“main”分支。所以这可能是这个错误的一个可能原因。 【参考方案1】:
    试试git show-ref 看看你有什么参考。有refs/heads/master吗?

由于最近的“用 GitHub 中的 main 替换 master”操作,您可能会注意到有一个 refs/heads/main。因此,以下命令可能会从git push origin HEAD:master 更改为git push origin HEAD:main

    您可以尝试git push origin HEAD:master 作为更独立于本地引用的解决方案。这明确表明您希望将本地引用 HEAD 推送到远程引用 master(请参阅 git-push refspec 文档)。

【讨论】:

我的主分支不在提交之上!所以我创建了一个分支,它位于所有分支的末尾,并将它们推送到服务器: git checkout -b testbranch ; git push origin testbranch:master git show-ref 展示了我的分支; git push origin HEAD:<branch> 为我工作。 你刚刚救了我 Vi。谢谢git push origin HEAD:master。但是为什么像git push --force origin master 这样的东西不起作用呢? master 现在改为main【参考方案2】:

在我只添加一个目录之后,我发现这发生在一个全新的存储库中。

只要我添加了一个文件(例如 README),Git 推送就非常好用。

【讨论】:

这可能有效,因为 git 实际上并不跟踪目录,只跟踪文件。所以如果一个目录是空的,git实际上不会添加它。 OP 添加了一个文件 (xx.php),所以在这种情况下这不是问题,即使在其他情况下这可能是一个问题,并且添加一个文件是 that 的解决方案 i> 问题。 这样一个简单的解决方案可以解决令人沮丧的问题。我正在测试 repos 的创建和克隆,并创建了空目录而不是文件。 8 年后,这让我有些头疼! 就我而言,1--> git init 2---> git add origin....etc 3---> git git push -u origin master ===>然后我得到了上述错误。 ===>然后我执行了以下2个命令,它消失了。 ---> git add * ---> git commit -m "Some message" --->git git push -u origin master ===>对我来说很好,就我而言。【参考方案3】:

也许你只需要承诺。我这样做时遇到了这个问题:

mkdir repo && cd repo
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 master

成功了!

【讨论】:

不要盲目的跟着这一步,看看@Vi提到的,​​然后修改你的push命令来修正ref。 出现此错误的最可能原因是所有文件都未跟踪且未添加。 git add --all 如果您希望添加所有文件或者您可以有选择地添加文件。然后git commit -m "Initial comment"git push origin master。这肯定会奏效。 修复了不同的问题,这很好,但并不是对 This 实际问题的真正答案。 git commit -m 'initial commit' 应该用双引号引起来。 'git commit -m "initial commit",至少在 Windows 上。 另一个可能的原因:你实际上没有一个名为 master 的分支【参考方案4】:

当您添加文件,忘记提交和推送时,会发生这种情况。 所以提交文件然后推送。

【讨论】:

【参考方案5】:

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

我的错误信息是这样的:

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.

【讨论】:

其他答案并没有解决我遇到的问题(例如,我已经提交并且仍然有这个错误),但是做一个git push origin BRANCH --force 工作。谢谢! 见this earlier answer。我怀疑您需要添加一个文件,因为 git 不会跟踪空目录。 push --force 也可能完全摧毁同事的辛勤工作。由它添加警告。 这解决了我的问题。我认为 git add 做到了。虽然一开始 git 无法识别事物,但这可能就是我遇到问题的原因。 git add 命令解决了我的问题。在那之后,我也能够在没有 --force 的情况下推动。谢谢阿约 git push origin master --force # 【参考方案6】:

当您在特定分支中并尝试推送另一个尚不存在的分支时,也会发生这种情况,例如:

$ 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'

【讨论】:

哈哈。我试图推送到原始主机,但该分支不存在。它被称为原始稳定。 -u 可能在这里有所帮助。 上述情况,问题当然是没有本地分支master,所以不能推送。您要么想要推送现有的分支,要么创建主分支然后推送它,如下所示:git checkout -b master; git push -u origin master; 当我拼错分支名称时才得到这个。 我的本地分支拼写为“sheduler”,而我正在做git push origin scheduler。哈!一封信将在编程中杀死您。大声笑【参考方案7】:

关于Aryo's answer:就我而言,我必须使用本地 Git 存储库的完整 URL 来推送文件。首先,我删除了当前目录中的所有文件并创建了 README 添加它。

增加了一些。然后我提交了这些文件,最后推送了它们,为存储库提供了一个正确的 URL。这里 yourrepository 是服务器上存储库的名称。

rm -rf *

touch README
git add README
touch file1 file2
git add file1 file2

git commit -m "reinitialized files"
git push git@localhost:yourrepository.git master --force

【讨论】:

为什么您需要为您的遥控器使用完整的 URL,而不是使用 git remote add origin &lt;url&gt; 为其设置别名?【参考方案8】:

当我收到 src-refspec 错误时,上述解决方案均不适用。

我的工作流程:

推送到远程分支(本地分支名称相同) 删除了那个远程分支 更改了一些内容并提交 再次推送到相同的远程分支名称(相同的本地分支名称) 出现 src-refspec 错误。

我通过简单地创建一个新分支并再次推送来修复错误。 (奇怪的是,我不能简单地重命名分支 - 它给了我fatal: Branch rename failed。)

【讨论】:

【参考方案9】:

如果您是第一次使用 Git 安装,则需要配置它:

git config --global user.email "you@example.com"

git config --global user.name "Your Name"

【讨论】:

【参考方案10】:

缺少或跳过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” 他们在他们的问题中添加并承诺,所以这不是问题,即使这对其他人有帮助。 这个答案确实有效,因为这里使用了-u 选项。【参考方案11】:

如果要在origin远程新建一个分支,需要先在本地创建相同的分支:

$ git clone -b new-branch
$ git push origin new-branch

【讨论】:

【参考方案12】:

我认为这是因为您推送了无效的分支。

一般来说,因为存储库没有共同的主分支(可能是开发分支)。你可以使用

git branch

查看分支。

【讨论】:

【参考方案13】:
    我的更改已提交 强制推送仍然给我同样的错误。

所以我尝试了Vi's solution:

git push origin HEAD:<remoteBranch> 

这对我有用。

【讨论】:

我终于发现是因为我拼错了分支名称。我使用git push origin HEAD:B 将分支 A 成功推送到了名为 B 的分支,但是每次在分支 A 上使用 git push origin 推送时,我仍然遇到相同的错误。 @YiHuang,谢谢,我之前检查了我的分支名称,然后因为您的评论而再次检查 - 有同样的问题,拼错了。 @YiH.i 确信我的分支名称是正确的,但我只是在阅读您的评论后重新检查了它,我的错误 - 有同样的问题。 为什么我们需要指定HEAD @LauZyHou 在远程分支与本地分支名称不同的情况下需要它git-scm.com/docs/git-push#Documentation/…【参考方案14】:

我正在为一个 GitHub 存储库做出贡献,因此我分叉了该项目,克隆了它,创建了自己的分支,进行了一些提交,并尝试推送。

此时我发现我克隆的不是我的 fork,而是原始项目存储库(我无权推送)。

所以我将.git/config 更改为将origin 指向我的存储库。

此时,当我尝试推送时,我收到了错误error: src refspec my_awesome_branch does not match any.

我所要做的就是触摸任何文件并提交它(类似于您在this answer 中看到的):

git touch README
git commit -m "fixing error in my git repo"

然后:

git checkout master
git pull origin master
git push origin master # This will tell my remote repository about my new branch
git checkout my_awesome_branch
git push origin my_awesome_branch # Now it will work

【讨论】:

【参考方案15】:

如果您尝试推送的分支名称中有拼写错误,也会发生这种情况。

【讨论】:

我怀疑我们中的很多人通过网络搜索来到这里实际上输入了错误的名称!【参考方案16】:

我遇到了类似的错误。但 Git 告诉我:

*** Please tell me who you are.

运行

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

或设置您帐户的默认身份。

Omit --global to set the identity only in this repository.

然后错误就消失了。

【讨论】:

我迁移到了一台新机器上并遇到了这些错误。设置我的 GIT 信息修复了它。【参考方案17】:

这对我有用,重置为远程掌握存储库:

git checkout master
git commit -a -m "your comment"
git push origin master

【讨论】:

【参考方案18】:

我已经创建了一个提交。确保你推送到正确的分支。

我输入的是git push origin master,但是当我输入git branch时,我在v1分支上,所以我必须输入git push origin v1

【讨论】:

如果你想推送你当前的分支,一个简单的方法是简单地做git push origin HEAD,或者git push origin @,如果你使用的是最新版本的Git,或者git push origin head如果您使用的是 Windows 或 OS X。【参考方案19】:

这只是意味着你忘了做初始提交,试试

git add .
git commit -m 'initial commit'
git push origin master

【讨论】:

请写 git commit -m "initial commit"【参考方案20】:

我在尝试将内容推送到 GitHub 上的新存储库时遇到此错误。我已经在本地创建了 Git 存储库,而且我使用 Web GUI(包括 LICENSE 文件)在 GitHub 上创建了存储库。

在我将 LICENSE 文件从原本为空的 GitHub 存储库中提取到本地存储库后,问题就消失了。之后,我可以毫无问题地推动。

【讨论】:

【参考方案21】:

对我来说,我必须确保在服务器上正确配置了 公钥(附加在 ~/.ssh/authorized_keys 中)和 GitHub/Bitbucket(添加到我的 SSH GitHub 或 Bitbucket 上的密钥)——它们需要匹配。那么:

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

【讨论】:

【参考方案22】:

我也收到了这个问题,但这是因为我在推送之前不小心关闭了我的服务器。这也会导致同样的错误。

【讨论】:

【参考方案23】:

我的问题是“主”分支尚未在本地创建。

快速

git checkout -b "master"

创建了 master 分支,此时快速

git push -u origin master

将工作推送到 Git 存储库。

【讨论】:

【参考方案24】:

要修复它,请重新初始化并遵循正确的代码顺序:

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

【讨论】:

【参考方案25】:

我有一个非常长的本地分支名称。

git branch -m new_shorter_branch_name

解决了问题。

【讨论】:

限制是多少?【参考方案26】:

我遇到了同样的问题并使用以下步骤修复了它:

git pull --rebase https://github.com/yoursmaster git 添加。 git commit -m '提交信息' git push origin master

【讨论】:

【参考方案27】:

来自 Git 的错误:

错误:src refspec master 不匹配任何内容。

已修复此步骤:

git commit -m "first commit"

在我跑之前:

git add <files>

我跑了之后:

git push -u origin master

【讨论】:

【参考方案28】:
    首先,git add . 第二,git commit -m "message" 第三,git push origin branch

请检查拼写错误,因为这也可能导致错误。

【讨论】:

【参考方案29】:

此问题的另一个可能原因是分支名称拼写错误。因此,如果您按照我所做的那样做,那么问题将通过更正来解决:

git push origin mater

git push origin master

【讨论】:

【参考方案30】:

我收到此错误是因为我的本地分支名称与我尝试使用 git push origin &lt;&lt;branchname&gt;&gt; 创建的新远程分支不匹配。

【讨论】:

以上是关于Git:在 Git 中推送提交时消息“src refspec master does not match any”的主要内容,如果未能解决你的问题,请参考以下文章

在git中实施提交消息格式

如何查看新的 git 分支将推送哪些 git 提交?

推送时的 Git 本地提交时间戳

可以克隆我的 Git 存储库但不能提交和推送

如何在 git 中编辑任何提交的提交消息? [复制]

推送后如何在git中压缩提交?