En supposant que le sous-module du référentiel contient un commit que vous voulez utiliser (à la différence de la validation qui est référencé à partir de l'état actuel de la super-projet), il y a deux façons de le faire.
La première exige que vous connaissez déjà de la validation de la sous-module que vous souhaitez utiliser. Il fonctionne à partir de l' "à l'intérieur," par l'ajustement direct des sous-module de mise à jour de la super-projet. La seconde fonctionne à partir de la "dehors, dans les" par trouver le super-projet de s'engager à ce que modifié le sous-module et ensuite mettre à zéro les super-projet de l'index pour faire référence à un autre sous-module s'engager.
À L'Intérieur,
Si vous savez déjà qui commit, vous voulez que le sous-module à utiliser, cd
pour le sous-module, découvrez le commit que vous voulez, alors git add
et git commit
dans le super-projet.
Exemple:
$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'
Oups, quelqu'un a fait un super-projet de commettre, qui fait référence à un inédit de validation dans la sous-module sub
. D'une certaine manière, nous savons déjà que nous voulons que le sous-module pour être à commettre 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
. Allez-y et vérifier directement.
La caisse dans le sous-module
$ cd sub
$ git checkout 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
Note: moving to '5d5a3ee314476701a20f2c6ec4a53f88d651df6c' which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
git checkout -b <new_branch_name>
HEAD is now at 5d5a3ee... quux
$ cd ..
Depuis que nous avons sont à la recherche d'un commit, ce qui produit un décollement de la TÊTE dans le sous-module. Si vous voulez vous assurer que le sous-module est à l'aide d'une branche, puis utilisez git checkout -b newbranch <commit>
de créer et de commander une branche à la validation ou la caisse de la branche que vous voulez (par exemple avec l'souhaité s'engager à la pointe).
Mise à jour le Super-projet
Une caisse dans le sous-module est reflété dans le super-projet comme une modification de l'arbre de travail. Nous avons donc besoin de mettre en scène le changement dans le super-projet de l'index et de vérifier les résultats.
$ git add sub
Vérifier les Résultats
$ git submodule update
$ git diff
$ git diff --cached
diff --git c/sub i/sub
index e47c0a1..5d5a3ee 160000
--- c/sub
+++ i/sub
@@ -1 +1 @@
-Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
Le sous-module de mise à jour a été silencieux parce que le sous-module est déjà à la commettre. Le premier diff montre que l'index et worktree sont les mêmes. La troisième diff montre que la seule mise en scène de changement est le déplacement de la sub
sous-module à un autre commit.
S'engager
git commit
Cela engage l'fixe jusqu'sous-module d'entrée.
À L'Extérieur, Dans
Si vous ne savez pas qui vous engage doit utiliser à partir de la sous-module, vous pouvez regarder l'histoire dans le superproject pour vous guider. Vous pouvez également gérer la réinitialisation directement à partir de la super-projet.
$ git submodule update
fatal: reference is not a tree: e47c0a16d5909d8cb3db47c81896b8b885ae1556
Unable to checkout 'e47c0a16d5909d8cb3db47c81896b8b885ae1556' in submodule path 'sub'
C'est la même situation que ci-dessus. Mais cette fois, nous allons nous concentrer sur la fixation de la super-projet au lieu de puiser dans le sous-module.
Trouver le Super-projet de l'Errant s'Engager
$ git log --oneline -p -- sub
ce5d37c local change in sub
diff --git a/sub b/sub
index 5d5a3ee..e47c0a1 160000
--- a/sub
+++ b/sub
@@ -1 +1 @@
-Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
+Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
bca4663 added sub
diff --git a/sub b/sub
new file mode 160000
index 0000000..5d5a3ee
--- /dev/null
+++ b/sub
@@ -0,0 +1 @@
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
OK, il semble comme il est allé de mal en ce5d37c
, de sorte que nous allons restaurer le sous-module de son parent (ce5d37c~
).
Alternativement, vous pouvez prendre le sous-module du a commis depuis le patch de texte (5d5a3ee314476701a20f2c6ec4a53f88d651df6c
) et le "dedans, dehors".
La caisse de la Super-projet
$ git checkout ce5d37c~ -- sub
Cette remise à zéro de la sous-module d'entrée pour sub
de ce qu'elle était à s'engager ce5d37c~
dans le super-projet.
Mise à jour le sous-module
$ git submodule update
Submodule path 'sub': checked out '5d5a3ee314476701a20f2c6ec4a53f88d651df6c'
Le sous-module de mise à jour est OK (il indique un décollement de la TÊTE).
Vérifier les Résultats
$ git diff ce5d37c~ -- sub
$ git diff
$ git diff --cached
diff --git c/sub i/sub
index e47c0a1..5d5a3ee 160000
--- c/sub
+++ i/sub
@@ -1 +1 @@
-Subproject commit e47c0a16d5909d8cb3db47c81896b8b885ae1556
+Subproject commit 5d5a3ee314476701a20f2c6ec4a53f88d651df6c
Le premier diff montre qu' sub
est maintenant la même chose en ce5d37c~
. La deuxième diff montre que l'index et worktree sont les mêmes. La troisième diff montre la seule mise en scène de changement est le déplacement de la sub
sous-module à un autre commit.
S'engager
git commit
Cela engage l'fixe jusqu'sous-module d'entrée.