最新相关博客:GitHub&Gitee&Gitlab&极狐(JihuLab)配置SSH公私钥详细过程 2023-9-9 09:06:16 补充
使用git命令行方式提交项目到GitHub 2023-12-2 22:20:13 补充
这里推荐我转载外国博主关于这个问题的文章,里面有微软官方的一些说明
5步将 GitHub 默认分支从 Master 更改为 Main(转载)
一、问题
1.1 问题1 默认分支 default branch
使用git命令行方式提交项目到GitHub(使用git命令行方式提交项目到GitHub)时发现一个问题:该项目目前有两个分支,一个是默认分支main,另外一个是分支master。我推送项目的默认分支并不是main,而是master(所以下图选择分支main中,无任何内容)。当时执行了git push -u origin master命令。因为GitHub之前的默认分支一直就是master,但2020年10月后GitHub宣布:新建项目的默认分支将从master逐步改为main。
选择分支master中,才会显示我们之前push到远端仓库的内容。
可以在此项目的Settings里的Branches位置看到Default branch确实就是main。
The default branch is considered the “base” branch in your repository, against which all pull requests and code commits are automatically made, unless you specify a different branch.
默认分支被认为是存储库中的“基本”分支,所有的拉取请求和代码提交都会自动执行,除非您指定了另一个分支。
Settings里提供了更改默认分支名称的功能:
1.2 问题2 Add a README file
我在创建仓库时点了“Add a README file”文件,这样会自动帮你创建一个README Markdown File。这样其实没什么大的问题,但会使得远端仓库和本地仓库从创建开始就失去了整合性(因为这个README文件目前只存在于你的远端仓库之中,你的本地仓库是没有的)。虽然之后可以强制覆盖,但本着省事的原则,建议一开始就不要勾选此选项。
二、问题分析
我在D:\gitrepository2023目录下clone了项目,同时在本地项目工作目录D:\project\IdeaProjects分别在StudyVC项目下,分别打开git bash。执行git branch 和git branch -a命令。
2.2 git branch命令
git branch 显示当前分支
git branch -a 显示所有分支
执行git clone命令(见左图)后,我们会默认处于default branch,即main分支下,同时系统也会将origin设置成该远端仓库的标识符。当前本地仓库(刚刚clone的)的main分支与GitHub远端仓库origin的main分支在内容上是完全相同的。
都有这三个文件:
.gitignore
LICENSE
README.md
.git文件是clone下载时,初始化仓库在本地自动生成的隐藏文件。
与在本地mkdir后git init 类似。
当前本地仓库的main分支:
GitHub远端仓库origin的main分支:
在本地项目工作目录D:\project\IdeaProjects\StudyVC下(见右图)执行命令显示:当前分支是master;本地仓库的master分支与GitHub远端仓库origin的master分支完全相同的。也就是我们之前在此目录下,执行git push -u origin master命令提交的内容。
以上情况,和我之前操作后的预期结果,完全一致。见使用git命令行方式提交项目到GitHub
2.3 remote/origin/HEAD ->origin/main
同时我们发现还有个remote/origin/HEAD ->origin/main 分支;origin/HEAD就是一个指针,表示默认分支,在此处指向origin/main,表示远端仓库(origin)的默认分支是main。
三、如何 master to main
如何把提交到Master的内容转移到默认分支main分支。
1:直接把master删除,再把内容重新推送到main上。
2: 把master分支的内容合并到main上,然后再删除本地和远端的master分支。
3.1 重命名当前分支
//git branch -m\M oldbranch new branch
git branch -m master main
有的博主说运行此命令,会使用master的历史记录创建一个名为main的分支。使用该参数-m会将master分支上的所有提交历史记录转移到新的main分支上,因此不会丢失任何内容。
我在git官网中查到了它的用法和描述信息:
git branch -m English
git branch -m 简体中文
3.2 删除远程的master分支
// 删除本地分支
git branch -d localBranchName
// 删除远程分支
git push origin --delete remoteBranchName
可以看到GitHub上,现在只有一个分支main了(见下图)。
3.2 git pull origin main --allow-unrelated-histories
3.2.1 git push - u origin main
此时如果直接git push - u origin main 会报错
git提示:在push之前先pull。
(error: failed to push some refs to…)error: failed to push some refs to如何解决
如何解决error: failed to push some refs to ‘git@github.com:…git pull冲突问题
意思就是你刚开始创建仓库的时候,勾选了这个初始化仓库自动创建READ.ME等文件,现在远程仓库有这个文件,但本地仓库却没有,可能本地还有一些小改动。(所以前文才建议每次创建仓库的时候不要勾选任何选项。)
3.2.2 git pull origin main --allow-unrelated-histories
我遵循了git提示:在push之前先pull。
执行了git pull命令,此命令基本上就是git fetch 和git merge命令的组合体,Git从指定的仓库中抓取内容,然后尝试将其合并进你所在的分支里。
3.2.3 建议
在进行任何更改之前,请检查您的提交是哪个分支
目前处于哪个分支
3.3 git push -u origin main
3.3.1 git push -u origin main
同时GitHub也检测到了:
3.3.2 关于git push -u origin master 或 git push - u origin main中的-u参数的权威说明
注意
:
1、这里的-u 参数
,一般在第一次 push
的时候使用,相当于建立某个本地分支(这里是master分支)
与对应的远端分支(orgin/master)
的第一次联系。后面再push这个本地分支
到远端仓库,就无需再加-u参数
,直接执行git push origin master
。
2、如果这个分支,是git pull下来的,修改后再push,也无需再加-u参数,直接执行git push -u origin master
,因为之前已经建立过
这个本地分支与对应的远端分支之间的第一次联系
,pull到本地workspace
,联系也会存在,后面再push这个本地分支
到远端仓库,就无需再加-u参数
,直接执行git push origin master
。
git push -u origin main
的情况同理
。
3、(来自《GitHub入门与实践》中的一些说明)
2023-12-2 22:08:01 补充 3.3.2
4 D:\project\IdeaProjects\StudyVC和远程仓库origin的main分支
D:\project\IdeaProjects\StudyVC :
远程仓库origin的main分支:
现在远端仓库origin的main默认分支的.gitignore、README.md、LICENCE文件同步到了本地的文件夹中;而本地的src文件夹也已经push同步到了远端仓库origin的main分支中。也就是说,本地和远程仓库的文件,经过操作,目前已经完全相同了。
参考资料:
git
RUNOBB-GIT
记Git报错-refusing to merge unrelated histories
refusing to merge unrelated histories的解决方案(本地/远程)综合
git解决push错误failed to push some refs to的解决
github合并master和main
解决Git上传过程中:error: failed to push some refs to 'git@github.com
git分支从master切换到main
github将默认main分支改成master
Github仓库master分支到main分支迁移指南
如何解决error: failed to push some refs to ‘git@github.com:…git pull冲突问题