web-dev-qa-db-fra.com

"refus de fusionner des historiques non liés" échec lors du transfert vers le référentiel récupéré

Je viens avec un problème à propos de Git Push.

Cela a fonctionné avec succès auparavant, mais il a échoué cette fois. Au début, je suis dans mon maître MINGW64 /d/javasoft/Apache-Tomcat-7.0.70/webapps/MyNote (master), puis

  • J'utilise git remote add Origin Pour relier mon origine distante, mais il signale que fatal: remote Origin already exists.
  • ensuite, j'utilise git remote rm Origin (Quelqu'un m'a dit de le faire), et c'est bon.
  • ensuite, j'utilise à nouveau git remote add Origin https://github.com/***/***.git. C'est bon.
  • puis, j’utilise git Push -u Origin master (j’ai essayé git Push Origin master, mais j’ai perdu mon entier local .git pour une raison quelconque, alors je suppose que c’est peut-être la première fois que Push, et Je devrais ajouter -u). MAIS, il alerte error: failed to Push some refs to 'https://github.com/***/***.git'
  • ensuite, quelqu'un m'a dit que je devrais utiliser git pull Origin master avant d'utiliser Push, et j'ai fait comme si de rien n'était. MAIS, il a alerté: fatal: refusing to merge unrelated histories.
  • J'ai trouvé des réponses dans Git refusant de fusionner des histoires non liées sur Rebase, mais il semblait que cela ne fonctionnait pas. Dans mon numéro, il alertait fatal: Couldn't find remote ref –allow-unrelated-histories

Je ne sais vraiment pas comment faire ... je veux juste pousser ...

23
Calvino Shaw

Cela ne peut pas être répondu sous peu.

Avertissement : Vous ne devez pas utiliser le --allow-unrelated-histories drapeau sauf si vous savez ce qu'est une histoire sans rapport et si vous êtes certain d'en avoir besoin. La vérification a été introduite uniquement pour prévenir les catastrophes lorsque des personnes fusionnaient par erreur des projets indépendants.

Autant que je sache, dans votre cas , les événements suivants :

Vous avez cloné un projet à un moment donné 1, et fait quelques développements pour pointer 2. Pendant ce temps, le projet a évolué à un moment donné 3.

Enter image description here

Ensuite, pour une raison quelconque, vous avez perdu votre sous-répertoire local .git, qui contenait tout votre historique de 1 à 2. Vous avez cependant réussi à restaurer l'état actuel.

Enter image description here

Mais maintenant, il n’a plus d’histoire, il semble que tout le projet soit sorti de nulle part. Si vous demandez à Git de les fusionner, il ne sera pas en mesure d'indiquer où se trouvent vos modifications. Il peut donc les ajouter à un projet distant. Pour autant que je sache, il ne fera que signaler d'énormes conflits d'ajout/ajout.

Vous devriez maintenant retrouver ce commit 1 de l'historique à distance où vous avez cloné le projet (je suppose que vous n'avez pas tiré après; sinon, vous devriez plutôt rechercher le dernier commit que vous avez tiré). Ensuite, vous devriez modifier votre historique pour qu'il commence à partir du commit 1, puis que Git pourra se fusionner correctement (avec pull par exemple).

Donc, les étapes (en supposant que vous soyez maintenant dans votre commit restauré sans historique):

  • estimer où est le commit 1 vous avez cloné comme un certain 1?, basé sur le temps de validation par exemple
  • courir git diff _1?_..HEAD, et lisez attentivement. Assurez-vous que la différence ne contient que les modifications que vous avez effectuées. S'il en contient plus, vous auriez dû choisir un peu faux 1? et vous devez l’ajuster et répéter cette étape
  • après avoir trouvé le commit 1. Vous devriez en faire votre parent; faire git --reset --soft _1_, et alors git commit.

Enter image description here

Il semble maintenant que vous ayez cloné à partir de 1, puis fait un commit avec toutes vos modifications. De toute façon, votre historique intermédiaire est perdu avec votre ancien .git répertoire, mais vous pouvez maintenant exécuter votre git pull - il fusionnera correctement.

76
max630