关于git的问题:error: src refspec main does not match any

刚开始使用github和git时,你可能会按以下(错误)步骤操作:

创建一个仓库,命名,描述,然后添加README和license。

关于git的问题:error: src refspec main does not match any_第1张图片

这里我们注意最后一句话

在这里插入图片描述

github告诉我们它将会为我们的新仓库创建main作为默认的branch。

然后我们的新仓库就创建好了,同时,我们希望在本地也创建一个文件夹与这个仓库建立联系,这样我们就可以在本机的command使用git直接向远程仓库commit我们的代码,而不用打开github。

关于git的问题:error: src refspec main does not match any_第2张图片

这里我在d盘创建了一个example文件夹作为本地仓库的载体(默认git已经安装并配置好了),

在这里插入图片描述

执行 git init 指令在这个文件夹创建了一个仓库。

关于git的问题:error: src refspec main does not match any_第3张图片

随后我在example文件夹中创建一个新文件hello world.txt,现在我希望commit本次更改到我刚刚创建好的github仓库,首先我复制了我远程仓库的地址:

关于git的问题:error: src refspec main does not match any_第4张图片

执行git remote add ... ......指令与远程仓库的建立连接:

在这里插入图片描述

然后git add .提交到缓冲区,git commit -m "..."提交commit,一切看起来那么顺利,只需最后git push 就愉快的结束了。

在这里插入图片描述

这里我们还记得github为我们创建的默认分支main,我们push到这个分支。

糟糕的部分来了:

error: src refspec main does not match any

关于git的问题:error: src refspec main does not match any_第5张图片

接下来我们分析上面步骤错误的原因:

  1. mianmaster

    你可能已经注意到了,在我们每次使用git指令时,git都在一直用蓝色的字提示我们当前处在一个叫master的分支:

关于git的问题:error: src refspec main does not match any_第6张图片

这是git为我们创建的默认分支,而在上述过程中我们完全无视了这一点,我们只关心github上的那个main分支,至于为什么它们的默认分支不同,github给出的解释是:

GitHub is working on replacing the term “master” on its service with a neutral term like “main” to avoid any unnecessary references to slavery

github觉得master有点slavery那味。

所以原因就是github的仓库中没有master这个分支,我们本地的仓库没有main分支,那好办,我们将本地仓库的master分支改名为main分支,它们不就统一了?

在这里插入图片描述

执行git branch -m master main,可以看到master已经被成功改为main了,如此,我们继续push就不会有什么问题了吧?

关于git的问题:error: src refspec main does not match any_第7张图片

  1. ! [rejected] main -> main (non-fast-forward)

这个问题解释起来很简单,还记得我们创建仓库时添加到README和license吗?在github仓库的main分支中有这两个文件,而在我们本地的仓库并没有这两个文件,如果我们执行这次commit,那么可能导致这两个文件丢失。

接下来你有以下几个解决方案:下列代码中的example为远程仓库名称

  1. 无视警告,README和license我不要了。

    git push --force
    

    执行以上指令强行提交。

  2. 试着获取远程仓库的初始提交( initial commit),就是README和license这两个文件的commit,在此基础上 rebase commit。但是这种方法可能有点棘手,不如暴力提交简单。

    git fetch example //获取初始提交
    git rebase example/mian 
    
  3. 试着合并初始提交与你的提交,这也是我最推荐的方法

    git fetch example
    git merge --allow-unrelated-histories example/main
    

    首先执行git fetch example 获取初始提交

关于git的问题:error: src refspec main does not match any_第8张图片

然后执行git merge --allow-unrelated-histories example/main合并,之后会进入这样一个文件,提示我们为本次提交加一些信息备注,我们很清楚我们在做什么,所以按两下ESC键,输入**:wq**(注意有冒号,这是UNIX保存的命令),回车

关于git的问题:error: src refspec main does not match any_第9张图片

可以看到本地的git仓库已经与远程仓库合并了,README和license也可以在本地仓库找到了。

关于git的问题:error: src refspec main does not match any_第10张图片

最后我们git push example main

关于git的问题:error: src refspec main does not match any_第11张图片

关于git的问题:error: src refspec main does not match any_第12张图片

终于提交成功了,泪目!!!!

补充一下,与github仓库建立连接的正确方式:

在github创建仓库后,在本地文件夹使用git clone指令将远程仓库clone到本地,就不会出现上述的问题了。

参考文章:

https://stackoverflow.com/questions/65173291/git-push-error-src-refspec-main-does-not-match-any-on-linux

你可能感兴趣的:(前端学习,github,git)