J'apprends git et je suis le livre de la communauté Git.
Auparavant (il y a longtemps), j'ai créé un référentiel public sur Github, avec quelques fichiers. Maintenant, j'ai configuré un référentiel Git local sur mon ordinateur actuel et j'ai validé certains fichiers. Ensuite, j'ai ajouté une télécommande pointant vers ma page Github:
[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C
Cela semblait être un succès:
[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)
Je souhaite maintenant 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 également 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
git init
? Dans ce dernier cas, ces dépôts ne sont pas liés (n'ont pas de commits communs) et vous ne pouvez pas les fusionner (pull is fetch + merge).Réponses:
Essayer
--allow-unrelated-histories
Comme max630 commenté, ou comme expliqué ici, Git refuse de fusionner des historiques non liés
la source
Résolvez le conflit, puis
la source
Bien que je sois tout à fait pour débloquer les problèmes de travail des gens, je ne pense pas que "push --force" ou "--allow_unrelated_histories" devrait être enseigné aux nouveaux utilisateurs comme des solutions générales car ils peuvent causer de véritables ravages dans un référentiel lorsque l'on les utilise sans comprendre pourquoi les choses ne fonctionnent pas en premier lieu.
Lorsque vous avez une situation comme celle-ci où vous avez commencé avec un référentiel local et que vous souhaitez créer une télécommande sur GitHub avec laquelle partager votre travail, il y a quelque chose à surveiller.
Lorsque vous créez le nouveau référentiel en ligne, il existe une option "Initialiser ce référentiel avec un README". Si vous lisez les petits caractères, il est dit "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 effectué un ajout / une validation en ligne avant de tenter une première diffusion. Ce qui se passe, c'est que vous créez un historique de commit unique à chaque endroit et ils ne peuvent pas être réconciliés sans l'allocation spéciale mentionnée dans la réponse de Nevermore (car git ne veut pas que vous fonctionniez de cette façon). Vous pouvez suivre certains des conseils mentionnés ici, ou plus simplement ne pas cocher 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 poussée initiale.
Référence: ma première expérience avec git + hub a été de rencontrer ce même problème et d'apprendre beaucoup pour comprendre ce qui s'était passé et pourquoi.
la source
S'il n'y a pas d'historique substantiel à une extrémité (c'est-à-dire s'il ne s'agit que d'un seul commit readme à l'extrémité github), je trouve souvent plus facile de copier manuellement le readme dans mon dépôt local et
git push -f
de faire de ma version le nouveau commit root .Je trouve que c'est un peu moins compliqué, ne nécessite pas de se souvenir d'un drapeau obscur et garde l'historique un peu plus propre.
la source
Sur votre branche - dites maître, tirez et autorisez des histoires sans rapport
A travaillé pour moi.
la source
Exécutez la commande suivante:
Un vim de fusion s'ouvrira. Ajoutez un message de fusion et:
Et vous êtes prêt à partir.
la source
Quand je l'ai utilisé
--allow-unrelated-histories
, cette commande a généré trop de conflits. Il y avait des conflits dans des fichiers sur lesquels je n'ai même pas travaillé. Pour surmonter l'erreur" Refusing to merge unrelated histories"
, j'ai utilisé la commande rebase suivante:Après cela, validez les modifications non validées avec un message de validation. Enfin, exécutez la commande suivante:
Après cela, ma copie de travail était à jour avec la copie distante et j'ai pu pousser mes modifications comme avant. Plus d'erreur d'histoires sans rapport lors du tirage.
la source
git pull --rebase=merge --allow-unrelated-histories
telle qu'elle--rebase=preserve
est obsolète git-scm.com/docs/git-pull#DocumentationDans mon cas, je faisais face au même problème, en particulier la première demande d'extraction après avoir ajouté à distance un dépôt Git. L'erreur suivante faisait face.
Utilisez la commande --allow-unrelated-histories. Cela fonctionne parfaitement.
la source