152 votes

Rétablir un pointeur de sous-module Git

J'ai un git sous-module dans mon git de pensions de titres. Si je comprends bien, le principal pensions de magasins SHA valeur (quelque part...), pointant vers le spécifique de la validation de la sous-module qu'il est "lié".

Je suis allé dans mon sous-module et tapé git checkout some_other_branch. Je n'ai aucune idée de qui je venais de commettre.

Je voudrais revenir le pointeur de sorte que la principale pensions de titres et les sous-module sont à nouveau la synchronisation.

Mon premier (probablement naïve) l'instinct est-à-dire git reset --hard - qui semble fonctionner pour tout le reste. À ma grande surprise, il ne fonctionne pas pour ce scénario.

J'ai donc compris que j'avais peut-type git diff, note le SHA ID de la sous-module pointeur utilisé pour l'avoir, et puis la tête dans le sous-module et git checkout [SHA ID]... mais il doit sûrement y avoir un moyen plus facile?

Comme je suis encore à apprendre sur les submodules, n'hésitez pas à corriger mes terminologie si il y a des mots pour des concepts que je ne sais pas.

197voto

Brian Riehman Points 7510

Vous souhaitez mettre à jour votre sous-module de sorte qu'il est en phase avec ce que le dépôt parent estime qu'il devrait être. C'est ce que la commande de mise à jour pour:

À partir de la sous-module page de manuel:

Mise à jour le régime enregistré d'submodules, c'est à dire clone manquant submodules et
la caisse de la commettre spécifié dans l'index de l'contenant
référentiel. Cela rendra les submodules de la TÊTE d'être détaché à moins que
--rebase ou --merge est indiquée ou sur la touche sous-module.$nom.mise à jour
est fixé à rebase ou de fusion.

Exécuter ce et tout doit être bien:

git submodule update

23voto

Adam Dymitruk Points 34999

Pour changer la validation d'un sous-module points, vous avez besoin pour passer à la caisse que la version dans le sous-module, puis revenir à l'contenant des pensions de titres, les ajouter et valider ce changement.

Ou, si vous voulez que le sous-module pour être sur la version haut pensions de points, n' git submodule update --recursive. Ajouter --init si vous avez simplement cloné.

Aussi, git submodule sans un sous-module de commande va vous montrer le commit que vous pointez. Il y aura un - ou un + à l'avant de l'engager si ce n'est pas dans la synchro.

Si vous regardez un arbre avec un sous-module, vous pouvez voir que le sous-module est marqué comme un commit contrairement au reste de ceux qui sont des gouttes ou des arbres.

pour voir ce qu'un particulier s'engager points wrt pour submodules, vous pouvez:

git ls-tree <some sha1, or branch, etc> Submodule/path

vous pouvez alors voir les commettre ou quoi que ce soit d'autre si vous les aimez en passant que dans le journal, etc (l' git-dir option à la commande git niveau vous permet de passer d'avoir à cd vers le sous-module):

git --git-dir=Submodule/path log -1 $(<the above statement>)

5voto

Dan Cruz Points 7016

Utiliser git ls-tree HEAD dans le "superproject" dossier pour voir ce que commettre votre sous-module a été à l'origine. Déplacez-vous ensuite dans le sous-module répertoire et utiliser git log --oneline --decorate pour voir ce que la direction de l'original livraison est sur. Enfin, git checkout original-commit-branch.

À l'aide de certains répertoires de tests j'ai mis en place, voici ce que les commandes pourrait ressembler à:

$ git --version
git version 1.7.4.1
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   sm2 (new commits)
#
no changes added to commit (use "git add" and/or "git commit -a")
$ git ls-tree HEAD
100644 blob 76813a07ae558db274cefc6d903ec24323fdeb0d    .gitmodules
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    main
160000 commit 7c5889497938cd5699a9234a98ee93947e52b1ed  sm1
160000 commit f68bed61cba6f94cef57554f2cf46a45a4a0d337  sm2
$ cd sm2
$ git log --oneline --decorate
5b8d48f (HEAD, foo1) foo1.1
f68bed6 (origin/master, origin/HEAD, master) Initial commit.
$ git checkout master
Switched to branch 'master'
$ cd ..
$ git status
# On branch master
nothing to commit (working directory clean)

Le "superproject" montre le sm2 sous-module à commettre f68bed6 mais sm2 a la TÊTE de 5b8d48f. Le sous-module s'engager f68bed6 a trois branches qui peuvent être utilisés pour la caisse dans le sous-module de répertoire.

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