Question originale
Je travaille sur un dépôt git contenant plusieurs sous-modules, dont l'un présente un comportement étrange : Je travaille sur une branche de fonctionnalités, appelons-la featureBranch
. Cette branche a été créée à partir de mon develop
branche. Pendant que je travaillais sur ma fonctionnalité, quelqu'un a mis à jour le sous-module et a livré les changements à develop
. Mon référentiel ressemble maintenant à ceci :
* 10000003 (HEAD -> featureBranch) Work on my feature
| * 10000002 (develop) Update submodule
|/
* 10000001 some commit
Pour être à jour, je souhaite fusionner le fichier actuel des develop
en featureBranch
via git merge develop
. Lors de l'exécution d'un git status
je m'attendrais à voir des changements dans le sous-module, puisque mon sous-module n'est, bien sûr, pas encore mis à jour avec la fonction develop
Le statut de l'entreprise. Or, ce n'est pas le cas. Après la fusion, aucune modification du sous-module n'est affichée et le sous-module reste dans l'état des commits 10000003
y 10000001
.
Il s'agit d'une description simplifiée de mon dépôt et du nombre de commits. J'ai essayé de reproduire cela avec un exemple de dépôt minimal, mais je n'y suis pas parvenu. Dans un cas minimal, tout fonctionne comme prévu, avec le sous-module montrant les changements après la fusion et un message d'erreur git submodule update
l'appel à la mise en place de l'étape de l'engagement 10000002
. Je peux cependant le reproduire dans mon référentiel productif via reset --hard
et un nouveau merge develop
aussi souvent que je le souhaite.
En dehors de la ligne de commande, j'utilise occasionnellement GitKraken, qui a des problèmes connus avec les submodules. Je ne peux donc pas l'exclure comme source de ce problème, mais comme cela se produit également lorsque j'utilise exclusivement la ligne de commande, cela ne me semble pas probable.
Quelqu'un a-t-il une idée de la raison pour laquelle un changement de sous-module dans une branche où il a été modifié n'est pas reporté sur une branche où le sous-module n'a pas été modifié ? Toute indication sera appréciée.
Remarques
Il s'est avéré que la simplification de ma question n'était pas valable. En réalité, featureBranch
originaire de develop
il y a longtemps. Il y a eu des fusions de develop
à featureBranch
de temps en temps, et je soupçonne que certaines de ces fusions, ainsi que les develop
divergeant des origines" et quelques "hard resets" entre les deux en sont la source. En raison de l'enchevêtrement de l'histoire, il est très difficile de déterminer la véritable raison, et je n'ai pas le temps de tout démêler.
Après la fusion develop
en featureBranch
et en ajoutant un autre commit modifiant le commit du sous-module en question, j'ai regardé le sous-module via l'historique des fichiers de GitKrakens, et étrangement il montre ce qui suit (lire de bas en haut) :
+Commit 183 //new commit id
-Commit ad7 //commit id from develop the submodule should have been on after merge,
but it actually was on ccc and did not show any changes!
**This is where the merge happened. Below is the file history from featureBranch
+Commit ccc //new commit id
-Commit ff9 //old commit id
+Commit ff9 //new commit id
-Commit bb6 //old commit id
+Commit bb6 //new commit id
-Commit 3f9 //old submodule commit id
Je reste très perplexe à ce sujet, mais je ne vais pas poursuivre mes recherches. Si quelqu'un peut faire la lumière sur cette question, j'en serais très heureux.