Git refuse de fusionner des histoires sans rapport sur rebase.
pendant git rebase origin/development
le message d'erreur suivant est affiché à partir de git:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
ma version git est 2.9.0. Utilisé pour travailler bien dans la version précédente.
Comment puis-je poursuivre ce rebase permettant des histoires sans rapport avec le drapeau forcé introduit dans la nouvelle version?
7 réponses
le comportement par défaut a changé depuis git 2.9:
"git merge" utilisé pour permettre la fusion de deux branches qui n'ont pas de commune base par défaut, qui a conduit à une toute nouvelle histoire d'un projet créé, puis retiré par une méfiance responsable, qui a permis une histoire parallèle inutile fusionné dans le un projet existant. La commande a été enseignée de ne pas permettre ceci par par défaut , avec une trappe d'évacuation
--allow-unrelated-histories
option à utiliser dans un événement rare qui fusionne l'histoire de deux projets qui ont commencé leur vie de façon indépendante.
Voir la git version changelog pour plus d'informations.
vous pouvez utiliser --allow-unrelated-histories
pour forcer la fusion à se produire.
dans mon cas, l'erreur était juste fatal: refusing to merge unrelated histories
sur chaque première demande de pull après avoir ajouté à distance un git repo.
utilisant --allow-unrelated-histories
drapeau travaillé avec la demande de traction de cette façon:
git pull origin branchname --allow-unrelated-histories
essayez la commande suivante
git pull origin master --allow-unrelated-histories
cela devrait résoudre votre problème.
j'ai eu cette erreur quand j'ai créé un dépôt local en premier. Puis il est allé à github et a créé un nouveau dépôt. Puis j'ai couru
git remote add origin <repository url>
quand j'ai essayé de pousser/tirer, j'ai eu la même erreur fatal: unrelated_histories
.
Voici comment je l'ai corrigé:
git pull origin master --allow-unrelated-histories
git merge origin origin/master
... add and commit here...
git push origin master
puisque toutes les autres réponses ne répondent pas réellement à la question, voici une solution inspirée de cette réponse sur une question connexe.
donc vous obtenez votre erreur en faisant git rebase:
$ git rebase origin/development
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
cette erreur n'annule pas le rebase, mais vous êtes maintenant au milieu de celui-ci:
$ git status
interactive rebase in progress; onto 4321beefdead
Last command done (1 command done):
pick 1234deadbeef1234deadbeef test merge commit
donc vous pouvez maintenant faire la fusion à la main. Découvrez que le parent commet la fusion d'origine s'engager:
$ git log -1 1234deadbeef1234deadbeef
commit 1234deadbeef1234deadbeef
Merge: 111111111 222222222
Author: Hans Dampf
Date: Wed Jun 6 18:04:35 2018 +0200
test merge commit
trouvez lequel des deux parents fusionnés est celui qui a été fusionné dans le courant (probablement le second, vérifiez avec git log 222222222
), puis faites la fusion à la main, en copiant le message de propagation de la propagation originale:
$ git merge --allow-unrelated 222222222 --no-commit
Automatic merge went well; stopped before committing as requested
$ git commit -C 1234deadbeef1234deadbeef
[detached HEAD 909af09ec] test merge commit
Date: Wed Jun 6 18:04:35 2018 +0200
$ git rebase --continue
Successfully rebased and updated refs/heads/test-branch.
j'ai eu du mal avec ça aussi mais j'ai réussi à trouver une solution.
lorsque vous rencontrez l'erreur ci-dessus, il suffit de sélectionner la propagation de la fusion et de poursuivre la rebase:
git cherry-pick -m 1 1234deadbeef1234deadbeef
git rebase --continue