0%

本地分支推送到远程分支报错:fatal:refusing to merge unrelated histories 一次解决记录

一、问题描述

A 在本地已经建好了项目,B 在 gitlab 上建立了一个空的 maste。
A 在本地使用 git clone 后,将本地项目文件提交到了本地仓库,在将本地 master 推送到远程 master 报无权限的错误。
这时候 A 叫 C 在远程 gitlab 先建立一个分支 develop1,里面包含一个 readme.md 文件。
A 在本地也建立了一个同名的开发分支(本地的 master 的1个副本),由于之前已经提交了本地代码到本地仓库,分支 develop1 没有了 【.gitignore】 文件,导致一些不相干的文件(如 xx.dll等)也在【未暂存文件】列表中,解决这个问题之后再次推送到远程 develop1 报错:

1
2
3
4
5
6
7
8
9
git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks push -v --tags --set-upstream origin develop_REQ514:develop_REQ514
Pushing to http://192.168.2.165/VPS/service-group/console/Cn.Vt.VPS.FoticLending.git
To http://192.168.2.165/VPS/service-group/console/Cn.Vt.VPS.FoticLending.git
! [rejected] develop_REQ514 -> develop_REQ514 (non-fast-forward)
error: failed to push some refs to 'http://192.168.2.165/VPS/service-group/console/Cn.Vt.VPS.FoticLending.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

很明显当前分支落后于远程分支,先拉取,然后再推送,还报错:

1
2
3
4
5
6
7
8
git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks fetch origin

git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks pull origin develop_REQ514
From http://192.168.2.165/VPS/service-group/console/Cn.Vt.VPS.FoticLending
* branch develop_REQ514 -> FETCH_HEAD

fatal: refusing to merge unrelated histories
完成时带有错误,见上文。

二、问题原因分析

本地的仓库和远程的仓库是相互独立的,之前 clone 下来的时候远程只有 master,然后提交本地的更改到本地仓库是通过 master 提交的,如果是直接在远程建立分支 develop1 后再 clone 到本地,然后再直接推送应该不会出现这个问题。

三、问题解决

先用命令【 git pull origin [分支] —-allow-unrelated-histories】拉取:

1
2
3
4
5
6
7
8
wankun@SH-HTYF-WANGK MINGW64 /d/svn/Loan/trunk/VPS_Console/Cn.Vt.VPS.FoticLending (develop_REQ514)
$ git pull origin develop_REQ514 --allow-unrelated-histories
From http://192.168.2.165/VPS/service-group/console/Cn.Vt.VPS.FoticLending
* branch develop_REQ514 -> FETCH_HEAD
Merge made by the 'recursive' strategy.
readme.md | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 readme.md

然后在推送到远程即可。

您的支持是我最大的动力!