在命令行中使用 Git 进行 git push -u origin main 操作时遇到报错 error: src refspec main does not match any。另一个错误信息是:error: failed to push some refs to 'https://github.com/xxx/xxx.git'。这是在一个新设备操作时遇到的问题,之前没有注意过,看了下发现是版本遗留问题。
推送分支
当我们执行 git push -u origin main 命令时,其会将本地的 main 分支推送到远程仓库 origin,并设置 origin 为该分支的默认上游(upstream)远程分支。
git push -u origin main
git push:这是 Git 中用于将本地分支的内容推送到远程仓库的命令。-u:这个选项是--set-upstream的缩写,用于设置远程分支作为本地分支的上游分支,可以省略。这意味着以后当使用git pull或git push命令时,Git 会自动知道应该与哪个远程分支交互。origin:这是远程仓库的默认名称。当你克隆一个仓库时,Git 会自动创建一个名为origin的远程仓库引用。main:这是想要推送的本地分支的名称。
问题就出现在分支名称不匹配上。在 Git 的早期版本中,master 是默认的主分支名称。而在 Git 的较新版本中,主分支通常被命名为 main ,具体取决于仓库的设置。

检查分支
既然如此,我们需要用 branch 命令检查一下本地的分支:
git branch
可以看到,这个设备安装 Git 后默认的本地分支名称为 master。

创建分支
于是,为了和远程默认的 main 分支匹配,需要使用 checkout 命令切换到 main 分支,若本地不存在 main 分支,则会创建一个名为 main 的本地分支并切换到该分支:
git checkout -b main
git checkout:这是 Git 中用于切换分支或恢复工作目录文件的命令。-b:这个选项告诉 Git 创建一个新分支,可以省略。main:这是新分支的名称。在这个例子中,新分支被命名为main。

checkout 后再次使用 branch 命令检查一下本地的分支:

可以看见已经创建并切换到 main 分支,再执行 pull 命令即可成功推送

删除分支
使用 git branch -d 命令可以删除 master 分支:
git branch -d master
如果 master 分支有未合并到其他分支的更改,Git 会阻止删除:

在这种情况下,可以使用 -D 选项强制删除:
git branch -D master

使用 git branch 命令检查,可见 master 分支已被删除:


