持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
1. 问题描述
本地开发项目时,在本地构建 SpringBoot 项目,为了进行版本控制和协同开发,会在 GitHub 上新增一个同名仓库存放代码,并增加了 readMe.md 文件。
本地项目初始化完成后,使用 IDEA 修改项目对应的 Git Remote 地址,将本地项目与远程 GitHub 仓库进行关联,准备将本地项目推送到远程。
因为提交代码需要前先将代码更新,使用 git pull 命令拉取远程最新代码时提示失败,显示:refusing to merge unrelated histories 。
2. 产生原因
refusing to merge unrelated histories ,根据字面意思可以理解为拒绝合并两个没有关系的历史记录。
Git 中出现该问题原因是 GitHub 远程仓库和本地项目是单独进行创建的,两者之间没有对应的关系,因此在拉去远程代码到本地时 git 会拒绝执行。
3. 解决办法
已经直到了问题产生的原因,那么就可以采取方法来避免问题的产生,常用的解决方法有以下两种
-
本地和远程仓库不要单独创建,而只需要创建一端,另外一端使用命令进行同步,这样就可以避免本地和远程仓库没有关系的问题。
-
如果已经分别创建了仓库,并不想重新创建,还可以使用 Git 中提供的命令强制将远程仓库和本地代码进行合并,合并之后本地和远程就产生了关联,此时再进行 push 就可以成功推送更新。 Git 中提供了
--allow-unrelated-histories命令参数代表统一无关的历史记录进行合并操作。
- 如果是 git pull 命令时出现该问题,可以使用
git pull origin master --allow-unrelated-histories命令执行拉取,然后再使用 git push 提交更新 - 如果是合并分支,可以使用
git merge master --allow-unrelated-histories命令将两个无关的分支进行合并,并继续其他操作
4. git pull/push 命令
git pull 和 git push 可谓是最常用的 Git 命令,再来回顾一下具体使用。
4.1 git pull
- git pull,拉取远程对应分支代码并合并到本地,相当于 git fetach(拉取) 和 git merge(合并) 两个命令的联合
标准命令格式:git pull <远程主机名> <远程分支名>:<本地分支名>
- 如果本地分支与远程分支已经关联,可以简写为
git pull <远程主机名>- 关联命令:
git branch --set-upstream master origin/master
- 关联命令:
- 如果本地分支对应的远程仓库是唯一的,可直接写为
git pull
4.2 git push
标准命令格式:git push <远程主机名> <本地分支名>:<远程分支名>
- 如果本地当前分支的
branch.*.remote已经关联,则可以直接使用 git push 命令完成推送 git push origin master,远程分支省略时默认推送到同名分支git push origin :master,本地分支省略时会认为推送空分支到远程,等同于删除远程分支git push,与 git pull 类似,当本地关联了唯一的远程分支时,可直接推送git push --force origin,如果远程分支比当前更新,可以使用该命令强制提交,但是可能会造成更新内容丢失,不建议这么使用。