I come up with a problem about Git push.
It worked successfully before, but it failed this time. In the beginning, I am in my master MINGW64 /d/javasoft/apache-tomcat-7.0.70/webapps/MyNote (master)
, and then,
git remote add origin
to relate my remote origin, but it alerts that fatal: remote origin already exists.
git remote rm origin
(Someone told me to), and it's OK.git remote add origin https://github.com/***/***.git
again. It's OK.git push -u origin master
( I tried git push origin master
, but I lost my local whole .git
for some reason before, so I guess it may be the first time to push, and I should add -u
). BUT, it alerts error: failed to push some refs to 'https://github.com/***/***.git'
git pull origin master
before I use push
, and I did as it. BUT, it alerted: fatal: refusing to merge unrelated histories
.fatal: Couldn't find remote ref –allow-unrelated-histories
I really don't know how to do... I just want to push...
The alternative (and longer) way of fixing the fatal: refusing to merge unrelated histories issues is to unstage your current commits, stash them, clone your required remote repository, and then place your stashed branch contents into the new clone.
The “fatal: refusing to merge unrelated histories” Git error occurs when two unrelated projects are merged (i.e., projects that are not aware of each other's existence and have mismatching commit histories). Consider the following two cases that throw this error: You have cloned a project and, somehow, the .
But this doesn't mean that Git cannot perform any merge. In fact, all you need to do to merge unrelated branches is to use the flag --allow-unrelated-histories . This tells Git to combine all the files and commits of both unrelated branches into one branch, as long as there are no file conflicts.
You can use the git reset --merge command. You can also use the git merge --abort command.
This cannot be answered shortly.
Warning: You should not use the --allow-unrelated-histories
flag unless you know what unrelated history is and are sure you need it. The check was introduced just to prevent disasters when people merge unrelated projects by mistake.
As far as I understand, in your case has happened the following:
You have cloned a project at some point 1
, and made some development to point 2
. Meanwhile, project has evolved to some point 3
.
Then you for some reason lost your local .git subdirectory - which contained all your history from 1
to 2
. You managed to restore the current state though.
But now it does not have any history - it looks like the whole project has appeared out of nowhere. If you ask Git to merge them it will not be able to say where your changes are, so it can add them to remote project, as far as I understand it will just report massive add/add conflicts.
You should now find back that commit 1
from the remote history where you have cloned the project (I assume you did not pull after that; if you did then you should instead look for the last commit you have pulled). Then you should modify your history so that is starts from that commit 1, and then Git will be able to merge correctly (with pull for example).
So, the steps (assuming you are now in your restored commit without history):
1
you have cloned from as some 1?
, based on commit time for examplegit diff _1?_..HEAD
, and read carefully. Make sure that the difference contains only edits which you have made. If it contains more then you should have picked a bit wrong 1?
and need to adjust it and repeat this step1
. You should make it your parent; do git --reset --soft _1_
, and then git commit
.Now it looks like you have cloned from 1
, then made one commit with all your changes. Your intermediate history is lost anyway with your older .git
directory, but now you can run your git pull
- it will merge correctly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With