web-dev-qa-db-fra.com

Git refusant de fusionner des histoires sans rapport sur Rebase

Pendant git rebase Origin/development, le message d'erreur suivant est affiché par Git:

fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef

Ma version de Git est 2.9.0. Cela fonctionnait bien dans la version précédente.

Comment puis-je continuer cette réorganisation en permettant des historiques sans relation avec l'indicateur forcé introduit dans la nouvelle version?

1760
Shubham Chaudhary

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 base commune par défaut, ce qui a entraîné la création d'un nouvel historique d'un projet existant, qui a ensuite été extrait par un responsable peu méfiant, ce qui a permis la fusion d'un historique parallèle inutile dans le projet existant. . La commande a été enseignée à ne pas autoriser cela par défaut , avec une option de hachage d'échappement --allow-unrelated-histories à utiliser dans un événement rare qui fusionne des historiques. de deux projets qui ont commencé leur vie indépendamment.

Voir le changelog de version de Git pour plus d'informations.

Vous pouvez utiliser --allow-unrelated-histories pour forcer la fusion.

2225
blue112

Dans mon cas, l'erreur était simplement fatal: refusing to merge unrelated histories à chaque tentative, en particulier la première demande d'extraction après l'ajout à distance d'un référentiel Git.

L'utilisation de l'indicateur --allow-unrelated-histories a fonctionné avec une demande d'extraction de la manière suivante:

git pull Origin branchname --allow-unrelated-histories
960
adi

Essayez la commande suivante:

git pull Origin master --allow-unrelated-histories

Cela devrait résoudre votre problème.

525
Ogbonna Vitalis

J'ai eu cette erreur lorsque j'ai d'abord configuré un référentiel local. Ensuite, je suis allé sur GitHub et j'ai créé un nouveau référentiel. 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
214
Adithya Bhat

Pour cela, entrez la commande:

git pull Origin branchname --allow-unrelated-histories

Par exemple,

git pull Origin master --allow-unrelated-histories

Référence:

question des histoires non liées GitHub

145
VIKAS KOHLI

J'ai eu le même problème. Essaye ça:

git pull Origin master --allow-unrelated-histories 

git Push Origin master
96
Aamir Kalimi
git pull Origin <branch> --allow-unrelated-histories

Vous serez dirigé vers une fenêtre d'édition Vim:

  • Insérer un message de validation
  • Puis appuyez Ctrl + X sortir de Vim
  • git Push --set-upstream Origin <branch>
91
Las Lemieux

Essayez git pull --rebase development

42
Daniel petrov

Puisque toutes les autres réponses ne répondent pas réellement à la question, voici une solution inspirée par 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 réellement la base, mais vous en êtes maintenant au milieu:

$ 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 les commits parent du commit de fusion d'origine:

$ git log -1 1234deadbeef1234deadbeef
commit 1234deadbeef1234deadbeef
Merge: 111111111 222222222
Author: Hans Dampf
Date:   Wed Jun 6 18:04:35 2018 +0200

    test merge commit

Déterminez lequel des deux parents fusionnés est celui qui a été fusionné dans le parent actuel (probablement le deuxième, vérifiez avec git log 222222222), puis effectuez la fusion à la main en copiant le message de validation de la validation d'origine. :

$ 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.
32
cdauth

Cela a fonctionné pour moi:

git Push Origin master --force
27
Aniket Patil

J'ai eu le même problème. Le problème est distant avait quelque chose empêchant cela.

J'ai d'abord créé un référentiel local. J'ai ajouté un fichier LICENSE et README.md à mon fichier local et engagé.

Ensuite, je voulais un référentiel distant alors j'en ai créé un sur GitHub. Ici, j'ai commis une erreur en cochant "Initialiser ce référentiel avec un fichier README", ce qui a également créé un fichier README.md à distance.

Alors maintenant, quand j'ai couru

git Push --set-upstream Origin master

J'ai eu:

error: failed to Push some refs to 'https://github.com/lokeshub/myTODs.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.

Maintenant pour surmonter cela je l'ai fait

git pull Origin master

Ce qui a entraîné l'erreur ci-dessous:

From https://github.com/lokeshub/myTODs
branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories**

J'ai essayé:

git pull Origin master --allow-unrelated-histories

Résultat:

From https://github.com/lokeshub/myTODs
 * branch            master     -> FETCH_HEAD
Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md
Automatic merge failed;
fix conflicts and then commit the result.

Solution:

J'ai supprimé le référentiel distant et créé un nouveau (je pense que ne supprimer que le fichier README aurait pu fonctionner) et ensuite que la procédure ci-dessous a fonctionné:

git remote rm Origin
git remote add Origin https://github.com/lokeshub/myTODOs.git
git Push --set-upstream Origin master
27
Lokesh Purohit

J'ai également eu du mal avec cela, mais j'ai réussi à trouver une solution de contournement.

Lorsque vous rencontrez l'erreur ci-dessus, sélectionnez simplement le commit de fusion, puis continuez le rebase:

git cherry-pick -m 1 1234deadbeef1234deadbeef
git rebase --continue
13
el_tigro