无法将代码推送到新的Git仓库主分支(main)

6

我对Git还是相对新手,在升级后将主分支改为main后,我创建了一个新的GitHub存储库。

我遇到的第一个问题是,当我执行git pull origin main命令时,没有任何内容被下载下来。此时这个存储库包含.gitignore、readme和许可证。我通过手动下载这些文件解决了这个问题。

然而,我无法将代码推送到main分支。当我运行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'

如何使我能够推送到main分支而不是master分支,因为在github网站上,main是我的默认分支?任何帮助将不胜感激。

2个回答

24

你本地的分支叫什么?git push origin main尝试将你本地名为main的分支推送到origin。如果你没有本地名为main的分支,那么Git就无法推送任何内容,这似乎是你收到此错误的原因。你可以运行以下命令:

git checkout -b main
git push --set-upstream origin main

这应该会解决这个问题。

简单来说,正在发生以下情况:

git checkout -b main

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

git push --set-upstream origin main

这个命令会将你的本地分支main推送到名为origin的GitHub远程仓库,并在GitHub上创建一个同名的新分支。使用--set-upstream参数告诉git,origin main是默认要推送到的远程仓库/分支组合,此后只需运行git push即可默认推送main上的任何本地更改。

一旦新的main分支被推送,确认一切都符合预期后,你可以直接从GitHub上删除master分支。你也可以通过运行以下命令在本地删除该分支:

git branch -D master

确保在确认所需内容已经在新的main分支中后,不要删除本地或远程master分支。虽然这应该不会发生,但双重检查永远没有坏处。


我尝试了 git push --set-upstream origin main 但是没有成功。 - Ebony Ayers
我备份了代码后删除了整个代码库,重新创建并执行了所有本地设置步骤,现在它可以正常工作了。感谢您的帮助。 - Ebony Ayers
根据我的有限经验,即使master是默认分支,我仍然需要配置--set-upstream来设置默认的git push远程和分支。这样,我就不必总是运行git push origin main,而是可以只运行git push。如果我想要推送到不同的远程或不同的分支,那么我也可以同时指定远程和分支。 - Sal
所有这些麻烦都是因为政治正确的硅谷经理决定Github将默认分支从master更改为main...难以置信。 - Charming Robot
git init会创建一个默认的主分支吗? - piyush172
显示剩余3条评论

3
当您想将本地repo推送到GitHub上的远程repo时,如果您的本地repo分支名为“master”,而您的远程repo名为“main”,则无法推送。
根据GitHub文档所述,解决方案是将您的本地repo重命名为“main”。
要执行此操作,您当前的分支需要是“master”。 使用以下命令验证您的分支:
git branch

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

然后,要重命名分支,命令是:

git branch -M main

标志-M是标志--move --force的快捷方式。

move表示移动/重命名分支,同时移动其配置和reflog。

此外,根据(#Sal from Dec 24, 2020 at 8:20)的评论,为了方便,您可以将'main'设置为默认分支:

 git push --set-upstream origin main

一旦'main'成为默认分支,您可以直接执行git pushgit pull命令而无需添加分支名称。


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