32 votes

Résolution des conflits de fusion Git

Un dépôt Git a été cloné sur plusieurs développeurs local de machines. Certaines modifications ont été apportées au code dans le référentiel. Nous sommes maintenant le message d'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 quelques fils en ligne, et plusieurs options ont été proposées. Une approche a été exécuté:

 git stash
 git pull
 git stash pop

Je crois que je comprends le principe de base de l'accrocher. Ma question est, est-ce une bonne solution, et je pourrais courir dans tous les problèmes à l'aide de cette approche? J'ai une assez bonne connaissance du développement web en général, mais je suis assez de base de Git utilisateurs et n'aurait pas beaucoup de capacité à me sortir de la difficulté à ce stade.

15voto

kylben Points 299

git stash est tout à fait légitime, même si, comme Greg l'a dit, pour une raison quelconque, fixant les conflits peuvent obtenir de l'étrange. Mais ils sont encore réparable, vous ne sera pas réellement fubar quoi que ce soit. La commande que je sais de ré-appliquer la cachette est - git stash apply, bien qu' pop peut être une alternative que je ne suis pas au courant (ou il pourrait faire quelque chose de différent, je ne sais pas, alors vous voudrez probablement utiliser apply.)

Est-il une raison pour laquelle vous ne voulez pas commettre ces modifications avant la fusion? En général c'est la bonne chose à faire.

Une autre option est la suivante:

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

Cela crée une nouvelle branche, qui va vous permettre d'obtenir votre maître à jour, sans conflits, (checkout master de nouveau, puis tirez ou fetch + de fusion). Ensuite, vous pouvez fusionner vos succursale de retour avec (tout en restant sur le master) git merge newwork. Vous pouvez résoudre les conflits sur le maître, tout en conservant les travaux sur le réseau, sans aucun conflit. C'est un peu plus en sécurité si vous êtes inquiet au sujet des conflits vraiment bousiller les choses, mais en général, les conflits ne sont qu'une partie du processus, donc ne vous inquiétez pas trop sur eux.

6voto

Greg Hewgill Points 356191

C'est une bonne pratique de toujours s'engager, les modifications locales avant de tirer (fusion) nouveau code. Si vous n'avez pas de valider, puis Git ne sais pas comment vous voulez gérer vos changements locaux. Fusionner qu'avec un travail propre arbre.

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 de conflits à partir d'une réelle fusion de fonctionnement est légèrement plus simple que de résoudre le conflit à partir d'un stash pop opération.

1voto

taka Points 51

Vous devez d'abord:

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

L'étape suivante:

 git pull origin master
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X