错误1(src refspec master does not match any)
直接上图
情景:
-
码云上刚刚创建一个新的仓库,然后本地也新建一个仓库,然后关联远程库
-
git remote add origin [email protected]:michaelliao/learngit.git
-
此时工作区有个修改没有add
-
直接
git push -u orign master
报这个错误
如何解决:
- add 然后 commit这个错误就会消失
- 但是此时出现了新的错误,见下图错误2
错误2(Updates were rejected because the remote contains…)
大概意思:远程库里面的一些文件你的本地库没有,你要先pull下来
情景:
- 检查过后发现远程库确实比本地库多个一个readme.md
解决:
- 执行
git pull origin master
,然后问题。。。果然没有解决,出现新的错误,见下图
错误3(refusing to merge unrelaed histories)
大概意思:拒绝合并两个无关的历史。虽然你关联起来了,但是你的远程库和本地库的文件不同,他就认为你是俩个无关的库,然后拒绝合并
解决方法有2种
第一种:
- 直接克隆远程的库,因为刚创建是一个空的库,克隆到本地也是空的。然后把你的项目代码复制进去,然后你就推送和拉取就都正常了。
- 这样做了之后,你的本地库就相当于是基于你的远程库,他们就建立的联系
- 我比较喜欢这种方法,你直接使用这种方法,你都不会碰到上面的第二个错误
第二种
-
使用命令
git pull origin master --allow-unrelated-histories
-
后面加上
--allow-unrelated-histories
, 把两段不相干的 分支进行强行合并,然后出现下面情况
导致按什么键都不起作用,被锁住了。
解决方案:
输入“:wq”,注意是英文输入状态下的冒号,然后按下“Enter”键即可。
个人多次遇到,特总结下供网友们交流互勉。
“ :wq”是Linux操作系统命令: 表示强制性写入文件并退出。 -
这个时候你会发现已经拉取成功了,你的本地库里面多了readme.md文件
-
然后你再推送和拉取就都正常了
git push -u origin master
基于错误2的一次实验
刚才的错误2是由于远程库有文件而你的本地库没有,导致git push
失败
那么这次就创建一个空的远程库
- 创建一个新的远程库,不要勾选readme
- 然后会出现以下界面,如果你勾选了readme,下图是不会出现的
- 创建一个本地库,
git init
,保证工作区干净的情况下,推送到远程库 git push -u origin master
一次成功
3次错误和1次试验的总结
- 工作区不干净的情况下,推送会报错
- 码云上面:如果你要推送一个已存在的本地库到远程库,建议直接创建一个空库,不要有任何文件
- 使用命令
git pull origin master --allow-unrelated-histories
把两段不相干的 分支进行强行合并 - 如果git界面锁了,输入“:wq”(英文输入状态下的冒号),然后按下“Enter”键即可。