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
Essayez --allow-unrelated-histories
Comme max630 commenté, ou comme expliqué ici Git refusant de fusionner des histoires non liées
git checkout master
git merge Origin/master --allow-unrelated-histories
Résoudre les conflits, puis
git add -A .
git commit -m "Upload"
git Push
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.
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.
Sur votre branche - par exemple maître, extraire et autoriser des historiques sans relation
git pull Origin master --allow-unrelated-histories
Travaillé pour moi.
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.
Exécutez la commande suivante:
git pull Origin master --allow-unrelated-histories
Une fusion vim va s'ouvrir. Ajouter un message de fusion et:
Et vous êtes prêt à partir.