J'essayais de fusionner une branche de développement en maître.
git checkout master
git pull . dev
Tout semblait bien se passer, même s'il y avait des conflits, je les ai résolus et commis. Mais quand j'ai vérifié cette arborescence de travail nouvellement fusionnée, il manque beaucoup de dossiers et de fichiers de dev.
git status // Shows conflicts & doesn't list some files/folders.
git commit -a
Created commit 55ffdd1: Merge branch 'dev' into master
git diff dev --name-status
Produit:
D folders/lm.gif
D folders/lmh.gif
...
Donc, les fichiers/dossiers qui ne s'affichent pas sur "git status". Cela ne s'est pas non plus révélé à la fin lorsque j'ai corrigé les conflits fusionnés.
Aussi quand j'essaye de fusionner à nouveau, il dit:
git merge dev
Already up-to-date.
Pourtant, la branche principale manque clairement de fichiers/dossiers de la branche de développement. Pourquoi donc? Ce dossier et tout son contenu ne devraient-ils pas être ajoutés? Les 'dossiers' sont suivis sur la branche de développement, alors ne devraient-ils pas être récupérés lorsque j'ai fait la fusion?
Quand il y avait un conflit de fusion plus tôt, git a-t-il arrêté le processus de fusion et ignoré un tas de fichiers/dossiers?
La branche de développement a eu beaucoup de changements, aurais-je pu gâcher quelque chose avec git dans le passé que maintenant certains fichiers/dossiers n'auraient pas fusionné?
(Lorsque j'ai créé la branche de développement pour la première fois, je ne savais pas ce que je faisais et j'ai fait des choses folles comme la réinitialisation, les retours, etc.)
En espérant que l'un de vous, gourou de git ici sur débordement de pile, connaît la réponse. :)
Merci Quang
Merci Walter, oui c'est ce qui s'est passé.
Après avoir enquêté, j'ai découvert que ce qui s'était passé était un peu compliqué. Il s'est avéré que.
J'espère que cela a aidé quelqu'un en plus de moi qui a beaucoup appris sur la façon d'utiliser git log, git show, git reflog en essayant de déboguer ce qui s'est passé.
Merci!
C'est donc ce que j'ai fait pour fusionner tous les contenus en dev qui ont été précédemment supprimés sur master.
git diff dev --name-status | grep D > deleted_files
git log --name-status > file_history
Je vais l'utiliser pour déterminer la dernière version mise à jour du fichier supprimé.git checkout 25b8a44 view.php
25b8a44 ... était le commit avec la dernière version mise à jour de view.php. J'ai essayé cherry-pick
et juste une ligne droite git checkout dev view.php
mais j'ai trouvé explicitement en utilisant l'ID de validation, il fusionne plus de son histoire. (Y compris le commit qui entraîne la suppression du fichier en premier lieu.)git diff dev --name-status | grep D
montre que tous les fichiers sont copiés. Puis, comme Walter l'a dit, un ammend commit git commit --amend
:)Il semble que git pense que les fichiers manquants ont été supprimés sur le maître à un moment donné entre le branchement de dev et la tête de pré-fusion. C'est la seule raison pour laquelle je peux penser pourquoi git abandonnerait silencieusement les fichiers suivis lors d'une fusion.
Malheureusement, je ne connais pas un bon moyen de résoudre ce problème. Je rajouterais probablement tous les fichiers supprimés de la branche dev manuellement (ou avec un peu de script bash), puis à un git commit --amend
pour réviser le commit de fusion afin de les inclure.