前提:当前已有项目和GitHub或者Gitee同步,可以是从远程仓库clone下来的,或者是本地项目已经上传到远程仓库的。
以下远程仓库地址使用的是ssh地址,远程仓库连接使用的是ssh key通信。可以参考之前的文章查看如何设置ssh key的公钥连接,git同步远程仓库代码命令。
当前远程仓库使用的是Github和Gitee。
另外需要注意的是,远程仓库的连接方式我使用的是ssh key,并且两个仓库的公钥完全相同。git config中的email和name也使用的是local配置。本文不涉及不同仓库的不同ssh key配置。
#查看已经设置的远程仓库别名列表git remote#查看别名对应的远程仓库地址git remote -v#查看别名更详细信息git remote show origin
#删除原来默认的仓库git remote rm origin#添加远程仓库git remote add <shortname> <url>
因为最开始代码是在和Github关联的本地仓库基础上操作的,所以推送到Github成功了。但由于代码之前没有和Gitee上建立过任何联系,并且Gitee上的仓库代码和本地有一些差异,所以git认为这是两个毫无关联的仓库(事实也是如此),所以在git push gitee master时报错了。先后是两个错误:(1). 本地仓库和远程仓库提交历史毫无关联,这需要merge为同一个历史;(2). merge历史时出现文件冲突,所以需要解决冲突(本文不详述解决冲突的各种方法),然后提交后进行全部远程仓库的推送。
在解决了错误之后,我又修改了本地的代码,实验下推送到github和gitee两个远程仓库,都全部成功。
再重申一个点:远程仓库的连接方式我使用的是ssh key,并且两个仓库的公钥完全相同。git config中的email和name也使用的是local配置。本文不涉及不同仓库的不同ssh key配置。
#拉取远程仓库最新代码git pull <远程仓库别名> <本地分支名称># 推送到远程仓库git push <远程仓库别名> <本地分支名称>3.1. 推送到 github远程仓库
3.2 推送(git push)到Gitee报错,解决方式
①:history错误。本地仓库从github来,所以本地仓库和远程仓库gitee毫无关联,需要merge成一个。
# 在git pull时加上参数 --allow-unrelated-histories是把两段不相干的分支进行强行合并git pull gitee master --allow-unrelated-histories
②:解决冲突
③:再次重新推送到gitee和github
OVER!