Comment faire pour que git merge gère les modifications non validées dans mon arbre de travail?

Un collègue et moi travaillons tous les deux sur la twig principale en ce moment. J’ai un code dans mon arbre de travail que je ne veux pas valider (instructions de débogage et autres). Maintenant, s’il commet des modifications sur certains de ces fichiers, je ne peux pas les fusionner:

$ git merge origin/master Updating 1b8c5c6..eb44c23 error: Entry 'blah.java' not uptodate. Cannot merge. 

Venant d’un contexte de subversion, je suis habitué à ce que mon arbre de travail soit automatiquement fusionné lorsque j’extrais des modifications du référentiel et qu’en cas de conflit, je les résous manuellement.

La manière la plus rapide de le faire est:

 $ git stash $ git merge origin/master $ git stash pop 

Essentiellement, supprimer mes modifications non validées, effectuer la fusion et réappliquer les modifications. Comment puis-je demander à fusionner pour fusionner automatiquement mon arbre de travail avec les modifications que j’essaie d’apporter?

Autant que je sache, le mieux que vous puissiez faire est ce que vous avez déjà avec git stash . Moi aussi, je trouve étrange que la fusion ne veuille traiter que des arbres propres.

Oubliez tout ce que vous avez appris de la subversion.

Toujours valider avant d’introduire des modifications externes.

Imaginez que vous ayez un arbre qui fonctionne surtout – peut-être pas parfait, mais vous faites des progrès. Ensuite, vous allez faire une fusion et le code que vous apportez a fait des ravages (il y avait un bug, trop de conflits à gérer, etc.). Est-ce que ce ne serait pas bien si vous pouviez juste défaire ça?

Si vous vous engagez, vous pouvez. Si vous ne le faites pas, vous allez juste souffrir.

Rappelez-vous: ce que vous commettez ne doit pas forcément être ce que vous poussez, mais vous pouvez facilement perdre ce que vous ne commettez pas.

Il suffit de faire la chose sûre et facile et commettre tôt et commettre souvent.

Vous ne pouvez pas dire à git merge de fusionner les modifications sur les fichiers qui ont des modifications par rapport à votre référentiel local. Cela vous évite de perdre vos modifications à ces moments où une fusion se passe mal.

Avec l’approche de fusion CVS et SVN, si vous n’avez pas copié manuellement vos fichiers avant la mise à jour et que ceux-ci les ont brouillés lors de la fusion, vous devez les rééditer manuellement pour revenir à un état correct.

Si vous validez vos modifications ou les rangez avant de faire une fusion, tout est réversible. Si la fusion ne se passe pas bien, vous pouvez essayer plusieurs façons de la faire fonctionner et d’accepter celle qui fonctionne le mieux.

Si vous git rebase modifications expérimentales ou de débogage, vous pouvez utiliser git rebase pour les déplacer après les git rebase vous obtenez via git merge afin de les éliminer plus facilement ou d’éviter de les envoyer accidentellement dans un référentiel.

Notez que l’utilisation de git rebase sur une twig que vous avez poussée vers un référentiel partagé causera du chagrin à tous ceux qui extraient ce référentiel.

Je préfère utiliser git stash dans ces cas-là, mais je ne l’utilise que si la fusion modifie les fichiers que j’ai édités et non validés.