Résolution des conflits de fusion Git

Un dépôt Git a été cloné sur les machines locales de plusieurs développeurs. Certaines modifications ont été apportées au code dans le référentiel. Nous obtenons maintenant l'erreur:

error: Your local changes to the following files would be overwritten by merge:

        public_html/sites/file
        public_html/sites/file1.txt
        public_html/sites/file2.txt
Please, commit your changes or stash them before you can merge.
Aborting

J'ai lu pas mal de discussions en ligne, et plusieurs options différentes ont été suggérées. Une approche a été exécutée:

 git stash
 git pull
 git stash pop

Je pense que je comprends le principe de base de stashing. Ma question Est, est-ce une bonne solution, et Pourrais-je rencontrer des problèmes en utilisant cette approche? J'ai une compréhension raisonnable du développement web en général, mais je suis un utilisateur git assez basique et je n'aurais pas beaucoup de capacité à me sortir des ennuis à ce stade.

31
demandé sur g_thom 2011-10-08 06:49:05

4 réponses

git stash est parfaitement légitime, bien que, comme L'a dit Greg, pour une raison quelconque, la fixation des conflits peut devenir étrange. Mais ils sont toujours réparables, vous ne serez pas réellement fubar quoi que ce soit. La commande que je sais pour ré-appliquer la cachette est git stash apply, bien que pop puisse être une alternative que je ne connais pas (ou elle pourrait faire quelque chose de différent, Je ne sais pas, donc vous voulez probablement utiliser apply.)

Y a-t-il une raison pour laquelle vous ne voulez pas valider ces modifications avant de fusionner? En général c'est la bonne chose à faire.

Une autre option est:

git stash
git checkout -b newwork
git stash apply
git commit ...

Cela crée une nouvelle branche, ce qui vous permettra d'obtenir votre maître à jour sans conflits, (checkout master à nouveau, puis pull ou fetch + merge). Ensuite, vous pouvez fusionner votre branche avec (tout en restant sur master) git merge newwork. Vous pouvez résoudre les conflits sur master, tout en conservant le travail sur newwork sans aucun conflit. C'est un peu plus sûr si vous êtes préoccupé par les conflits qui gâchent vraiment les choses, mais généralement, les conflits sont juste une partie du processus, alors ne vous inquiétez pas trop à leur sujet.

15
répondu kylben 2013-01-22 13:18:50

Il est recommandé de Toujours valider les modifications locales avant de tirer (fusionner) un nouveau code. Si vous ne validez pas, git ne sait pas comment vous voulez gérer vos modifications locales. Fusionner uniquement avec un arbre de travail propre.

Il peut y avoir des conflits dans la fusion, en raison des mêmes fichiers modifiés localement et par quelqu'un d'autre. Dans mon expérience, la résolution des conflits à partir d'une opération merge est légèrement plus simple que la résolution du même conflit à partir d'une réserve opération pop .

6
répondu Greg Hewgill 2011-10-08 02:53:51

J'ai une autre solution:

git reset --hard FETCH_HEAD

Cela fonctionne dans presque les cas.

4
répondu Narga 2015-07-09 08:01:49

Vous devez D'abord:

git checkout -- public_html/sites/file
git checkout -- public_html/sites/file1.txt
git checkout -- public_html/sites/file2.txt

Étape Suivante:

git pull origin master
2
répondu MrBii 2014-04-17 11:14:21