web-dev-qa-db-fra.com

Essayer d'extraire des fichiers de mon référentiel Github: "refuser de fusionner des historiques non liés"

J'apprends git et je suis le livre de la communauté Git.

Auparavant (il y a longtemps), j'ai créé un dépôt public sur Github, avec certains fichiers. Maintenant, je configure un référentiel Git local sur mon ordinateur actuel et valide certains fichiers. Puis j'ai ajouté une télécommande pointant sur ma page Github:

[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C

Cela semblait réussir:

[root@osboxes c]# git remote show learnc
* remote learnc
  Fetch URL: https://github.com/michaelklachko/Learning-C
  Push  URL: https://github.com/michaelklachko/Learning-C
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git Push':
    master pushes to master (local out of date)

Maintenant, je veux télécharger les fichiers de mon dépôt Github sur mon ordinateur. J'ai fait ça:

[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.

Cependant, je ne vois aucun nouveau fichier dans mon répertoire local. Comment puis-je les obtenir?

J'ai aussi essayé de faire ceci:

[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

BTW, localement, je suis sur la branche principale (il n'y a pas d'autres branches):

[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean
136
MichaelSB

Essayez --allow-unrelated-histories

Comme max630 commenté, ou comme expliqué ici Git refusant de fusionner des histoires non liées

280
Nevermore
git checkout master
git merge Origin/master --allow-unrelated-histories

Résoudre les conflits, puis

git add -A .
git commit -m "Upload"
git Push
89
Do Nhu Vy

Même si je suis tout à fait en faveur de la résolution des problèmes liés au travail des personnes, je ne pense pas que "Push -force" ou "--allow_unrelated_histories" devrait être enseigné aux nouveaux utilisateurs en tant que solutions générales, car ils peuvent causer de véritables ravages dans un référentiel. sans comprendre pourquoi les choses ne fonctionnent pas en premier lieu.

Dans une situation comme celle-ci, où vous avez commencé avec un référentiel local et souhaitez créer une télécommande sur GitHub avec laquelle partager votre travail, vous devez faire attention.

Lorsque vous créez le nouveau référentiel en ligne, il existe une option "Initialiser ce référentiel avec un fichier README". Si vous lisez les petits caractères, il est écrit "Ignorez cette étape si vous importez un référentiel existant".

Vous avez peut-être coché cette case. Ou de la même manière, vous avez ajouté/validé en ligne avant de tenter un Push initial. Ce qui se passe, c’est que vous créez un historique de commit unique à chaque endroit et qu’ils ne peuvent pas être rapprochés sans l’allocation spéciale mentionnée dans la réponse de Nevermore (car git ne veut pas que vous fonctionniez de cette manière). Vous pouvez suivre certains des conseils mentionnés ici, ou plus simplement, ne cochez pas cette option la prochaine fois que vous souhaitez lier des fichiers locaux à une toute nouvelle télécommande; garder la télécommande propre pour cette première poussée.

Référence: ma première expérience avec git + hub a été de rencontrer le même problème et d'apprendre beaucoup à comprendre ce qui s'était passé et pourquoi.

36
BigJMoney

S'il n'y a pas d'historique substantiel à une extrémité (c'est-à-dire s'il ne s'agit que d'un seul fichier Lisez-moi à la fin du github), il est souvent plus facile de copier manuellement le fichier Lisez-moi dans mon référentiel local et de créer un git Push -f pour que ma version devienne la nouvelle racine. commettre.

Je trouve que c'est un peu moins compliqué, qu'il n'est pas nécessaire de se souvenir d'un drapeau obscur et que l'histoire est un peu plus propre.

11
captncraig

Sur votre branche - par exemple maître, extraire et autoriser des historiques sans relation

git pull Origin master --allow-unrelated-histories

Travaillé pour moi.

7
Edgar256

Lorsque j'ai utilisé --allow-unrelated-histories, cette commande a généré trop de conflits. Il y avait des conflits dans les fichiers sur lesquels je n'ai même pas travaillé. Pour surmonter l'erreur " Refusing to merge unrelated histories", j'ai utilisé la commande suivante de rebase:

git pull --rebase=preserve --allow-unrelated-histories

Après cela, les modifications non validées avec un message de validation sont validées. Enfin, exécutez la commande suivante:

git rebase --continue

Après cela, ma copie de travail était à jour avec la copie distante et je pouvais appliquer mes modifications comme auparavant. Pas plus d'histoires sans rapport d'erreur lors de l'extraction.

1
Tasnim Fabiha

Exécutez la commande suivante:

git pull Origin master --allow-unrelated-histories

Une fusion vim va s'ouvrir. Ajouter un message de fusion et:

  1. Appuyez sur ESC
  2. Appuyez sur Maj + ';'
  3. Appuyez sur 'w' puis appuyez sur 'q'.

Et vous êtes prêt à partir.

1
KayV