Git Merge - incomplet, dossiers et dossiers manquants

j'essayais de fusionner une branche de dev EN master.

git checkout master    
git pull . dev

tout semblait aller bien, bien qu'il y ait eu des conflits que j'ai résolus et que j'ai commis. Mais quand j'ai vérifié cet arbre de travail nouvellement fusionné 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 sont pas apparus sur 'git status'. Il n'est pas non plus apparu à la fin lorsque j'ai corrigé les conflits fusionnés.

également quand J'essaie de fusionner de nouveau, il dit:

git merge dev    
Already up-to-date.

pourtant la branche principale manque clairement des fichiers/dossiers de la branche dev. Pourquoi est-ce? Ce dossier et tout son contenu ne devraient-ils pas être ajoutés? "dossiers" est traqué sur la branche dev, donc ne devrait-il pas être arrêté quand j'ai fait la fusion?

Quand il y avait un conflit de fusion antérieure n'git arrêter le processus de fusion et sauté un tas de fichiers/dossiers?

La branche dev eu beaucoup de changements, est-ce que j'aurais pu foirer quelque chose avec git dans le passé que maintenant certains fichiers/dossiers n'auraient pas fusionné?

(lorsque j'ai créé la branche dev pour la première fois, je ne savais pas ce que je faisais et j'ai fait des choses folles comme réinitialiser, revenir en arrière, etc.)

en espérant que l'un de vous gourou gitan est ici sur stack overflow connaît la réponse. :)

Merci, Quang


Réponse

Merci Walter, Oui c'est ce que arriver.

après avoir fait quelques recherches, j'ai découvert que c'était un peu compliqué ce qui s'est passé. Il s'est avéré que.

  1. dev ramifié à partir de master, il avait tous les fichiers.
  2. une troisième branche, appelons-la" nettoyée", ramifiée de dev.
  3. nettoyer branche supprimé tous les fichiers.
  4. branche nettoyée fusionnée (ou quelque chose?) avec le maître. À ce stade, les fichiers ont été supprimés hors de maître. Et la branche "nettoyée" disparaître.
  5. dev, les fichiers sont toujours là et j'ai continué à ajouter à cette branche, éditer des fichiers depuis un certain temps.
  6. dev a fusionné avec master et tous les fichiers supprimés précédemment par cleaned ont disparu.

J'espère que cela a aidé quelqu'un d'autre que moi qui a appris beaucoup sur la façon d'utiliser git log, git show, git reflog essayant de déboguer ce qui s'est passé.

Merci!

comment réparer

donc ceci c'est ce que j'ai fait pour fusionner tout le contenu dans dev qui a été précédemment supprimé de nouveau sur le maître.

  1. a tous les fichiers/dossiers qui ont été supprimés (sur dev, mais pas sur la nouvelle fusion de master) git diff dev --name-status | grep D > deleted_files
  2. liste de sortie de tous les fichiers et dossiers git log --name-status > file_history Va utiliser pour comprendre la dernière version mise à jour du fichier supprimé.
  3. parcourez la liste des fichiers deleted_, un par un, trouvez la version la plus mise à jour dans file_history et restaurez-la. Exemple: git checkout 25b8a44 view.php 25b8a44... a la validation avec la dernière version mise à jour de la vue.php. J'ai essayé cherry-pick et juste à droite git checkout dev view.php mais j'ai trouvé explicitement en utilisant l'id de propagation, il fusionne plus de son histoire. (Y compris la propagation qui provoque la suppression du fichier en premier lieu.)
  4. une Fois que tous les fichiers supprimés sont de retour une vérification rapide git diff dev --name-status | grep D indique que tous les fichiers sont copiés sur. Alors, comme Walter l'a dit, il faut s'engager!--10-->:)
29
demandé sur Quang Van 2010-08-13 03:28:47

1 réponses

il semble que git pense que les fichiers manquants ont été supprimés sur le master à un moment donné entre l'endroit où il se ramifie à partir de dev et la tête pré-fusion. C'est la seule raison qui me vient à l'esprit pour laquelle git laisserait silencieusement tomber des fichiers suivis pendant une fusion.

malheureusement, je ne sais pas comment arranger ça. Je voudrais probablement juste ajouter tous les fichiers supprimés de la branche dev manuellement (ou avec un peu de bash scripting), et puis à un git commit --amend pour réviser la fusion s'engager pour les inclure.

16
répondu Walter Mundt 2010-08-12 23:54:23