Un collègue et moi travaillons tous les deux sur la branche principale en ce moment. J'ai du code dans mon arbre de travail que je ne veux pas valider (instructions de débogage et autres). Maintenant, s'il valide les modifications de certains de ces mêmes fichiers, je ne peux pas les fusionner:
$ git merge Origin/master
Updating 1b8c5c6..eb44c23
error: Entry 'blah.Java' not uptodate. Cannot merge.
Issu d'un arrière-plan Subversion, j'ai l'habitude de fusionner automatiquement mon arbre de travail lorsque je récupère les modifications du référentiel et s'il y a des conflits, je les résous manuellement.
Le moyen le plus rapide que j'ai trouvé pour le faire dans git est:
$ git stash
$ git merge Origin/master
$ git stash pop
Essentiellement, supprimer mes modifications non validées, effectuer la fusion, puis réappliquer les modifications. Comment puis-je dire à Merge de fusionner automatiquement mon arborescence de travail avec les modifications que j'essaie de récupérer?
Pour 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 veuille uniquement traiter des arbres propres.
Oubliez tout ce que vous avez appris de Subversion.
Toujours valider avant d'introduire des modifications externes.
Imaginez que vous disposiez d'un arbre qui fonctionne principalement - peut-être pas parfait, mais vous progressez. Ensuite, vous allez faire une fusion et le code que vous apportez vient de faire des ravages (était un buggy lui-même, trop de conflits à gérer, etc.). Ne serait-ce pas bien si vous pouviez simplement annuler cela?
Si vous vous engagez, vous le pouvez. Sinon, vous allez juste souffrir.
Rappelez-vous: ce que vous engagez ne a pas ce que vous Poussez, mais ce que vous ne vous engagez pas, vous pouvez facilement le perdre.
Faites simplement ce qui est sûr et facile et engagez-vous tôt et engagez-vous souvent.
git pull
"fonctionnera tout simplement"git stash save
git pull
git stash pop
git stash save
git pull
git stash pop
git reset
git stash drop
git pull
"fonctionnera tout simplement"git pull --rebase
"fonctionnera encore mieux" en raison d'une histoire plus propregit pull
git add FILE
pour chaque FICHIER en conflitgit commit
git pull --rebase
pourrait encore "fonctionner encore mieux" en raison d'une histoire plus propre Pour une explication détaillée, veuillez consulter: https://happygitwithr.com/pull-tricky.html
Vous ne pouvez pas dire git merge
pour fusionner les modifications sur les fichiers qui ont des modifications par rapport à votre référentiel local. Cela vous protège de la perte de vos modifications aux moments où une fusion se passe mal.
Avec l'approche CVS et SVN de la fusion, si vous n'avez pas copié manuellement vos fichiers avant la mise à jour et qu'il les a brouillés lors de la fusion, vous devez rééditer manuellement pour revenir à un bon état.
Si vous validez ou modifiez vos modifications avant d'effectuer 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 choisir celle qui fonctionne le mieux.
Si vous effectuez des modifications expérimentales ou de débogage, vous pouvez utiliser git rebase
pour les déplacer après les validations que vous obtenez via git merge
pour faciliter leur élimination ou pour éviter de les envoyer accidentellement dans un référentiel.
Notez que l'utilisation de git rebase
sur une branche que vous avez poussée vers un référentiel partagé causera du chagrin à tous ceux qui tirent de ce référentiel.
Je préfère utiliser git stash
dans ces cas, mais je ne l'utilise que si la fusion change des fichiers que j'ai édités et non validés.