无法在新的 git repo 上推送到 main

Ebo*_*ers 1 git github

我是 git 的新手,并且在将 master 切换到 main 的更新之后创建了一个新的 github repo。

我遇到的第一个问题是,当我拉动时,git pull origin main什么也没有掉下来。当时,回购继续是 .gitignore、自述文件和许可证。我通过手动下载它们解决了这个问题。

但是,我无法推送到主要内容。当我尝试运行时,git push origin main我收到一条错误消息,并被 git 告知运行以下命令:git push --set-upstream origin master. 运行之后,我现在可以推送到 master 而不是 main。当我尝试运行时git push origin main,出现以下错误:

error: src refspec main does not match any
error: failed to push some refs to 'https://github.com/Ebony-Ayers/CS-style-text-format'
Run Code Online (Sandbox Code Playgroud)

根据github网站上的repo main是我的默认分支,我该如何做到这一点,以便我可以推送到main而不是master?任何帮助将不胜感激。

Sal*_*Sal 10

你当地的分支机构叫什么?git push origin main尝试调用您的本地分支main并将其推送到origin. 如果您没有名为 的本地分支main,则 git 将无法推送任何内容,这似乎就是您收到此错误的原因。您可以执行以下操作:

git checkout -b main
git push --set-upstream origin main
Run Code Online (Sandbox Code Playgroud)

这应该可以纠正这个问题。

分解正在发生的事情:

git checkout -b main
Run Code Online (Sandbox Code Playgroud)

此命令创建一个名为main. 它与您正在工作的分支相同(我假设master)。您可以通过运行git status并在打印的几行中检查分支名称应显示的分支,或者更清楚地git branch列出所有本地分支但突出显示您所在的当前分支。创建新分支时,任何本地更改(无论是暂存的还是未暂存的)也将保留,不会从工作目录中删除。

git push --set-upstream origin main
Run Code Online (Sandbox Code Playgroud)

此命令推送到originGitHub 上远程存储库的名称,并推送main我们在上面创建的本地分支。这也将在 GitHub 中创建一个同名的新分支,并且该--set-upstream标志告诉 git 这origin main是您要推送到的默认远程/分支组合,您可以简单地运行git push,默认情况下它将推送任何本地更改main

一旦新main分支被推送,并且您确认一切都按预期存在,您应该能够master直接从 GitHub 中删除该分支。您还可以通过运行在本地删除分支:

git branch -D master
Run Code Online (Sandbox Code Playgroud)

在确认master您需要的所有内容都在新main分支中之前,请确保不要删除本地或远程分支。这不应该是这种情况,但仔细检查永远不会有什么坏处。


Yar*_*riv 5

当您想要将本地存储库推送到 GitHub 中的远程但您的本地存储库分支已命名 'master'并且您的远程存储库已命名时'main',您将无法推送。

GitHub 文档中描述的解决方案是将本地存储库重命名为'main'.

为此,您当前的分支需要'master' 使用命令验证您的分支:

git branch
Run Code Online (Sandbox Code Playgroud)

这将列出所有分支并突出显示您当前的分支。

然后重命名分支的命令是:

git branch -M main
Run Code Online (Sandbox Code Playgroud)

flag-M是 flags : 的缩写--move --force。这move意味着移动/重命名分支及其配置和引用日志。

此外,正如(#Sal from Dec 24, 2020 at 8:20)所评论的, 为了方便起见,您可以使用以下命令将其设置'main'为默认分支:

 git push --set-upstream origin main
Run Code Online (Sandbox Code Playgroud)

一旦'main'是默认的,那么您可以只添加git pushgit pull不添加分支名称到命令中。