2010-12-15 89 views
21

J'ai un projet simple qui a un sous-module. J'ai fait des changements à ce sous-module et les ai validés, mais je ne peux pas les pousser à github.Impossible de pousser les validations depuis un sous-module git?

$ cd lib/mongodb-php-odm 
$ git branch 
* (no branch) 
    master 
$ git remote -v 
origin [email protected]:colinmollenhour/mongodb-php-odm.git 
$ git ls-remote . 
964737623a362f6303e87ec41f2c7090c8c2c093 HEAD 
6f5f91eff9b1854faa30608f335aee92aa7532eb refs/heads/master 
6f5f91eff9b1854faa30608f335aee92aa7532eb refs/remotes/origin/HEAD 
6f5f91eff9b1854faa30608f335aee92aa7532eb refs/remotes/origin/master 
$ git push origin master 
Everything up-to-date 

Je ne comprends pas pourquoi il dit: « Tout ce que la mise à jour » parce que le 964737 commettras n'a pas été poussé à GitHub. Il est probable que j'ai fait quelque chose de mal, mais je n'ai aucune idée de ce que ce serait ..

Comment puis-je pousser la dernière validation de ce sous-module vers github?

Répondre

14

Il semble que vous avez commis à aucune branche, à savoir votre engagement ne fait pas partie d'une branche. Créez une branche où vous vous trouvez, puis lancez gitk pour la comparer à master, puis sélectionnez-la ou refaites le cas échéant.

+8

Merci, ça m'a fait aller dans la bonne direction. Voici les étapes que j'ai prises exactement, qui ont fonctionné comme un charme. Ça semble assez simple maintenant ... git checkout -b temp; git caisse maîtresse; git merge temp; git branche -d temp; git pousser le maître d'origine; – ColinM

+1

C'est généralement l'état dans lequel se trouve un sous-module. Lorsqu'une commande git submodule vérifie un commit donné, elle le fait en mode HEAD détaché (pas de branche extraite, juste la validation spécifique). – Cascabel

+2

[ce qu'il faut faire si vous vous engagez à aucune branche] (http://edspencer.net/2009/10/git-what-to-do-if-you-commit-to-no-branch.html) est un bon article pour résoudre cette situation. –

5

@ColinM, je pense que vous devez déplacer votre commentaire à une réponse, car il est la solution complète, qui m'a aidé à résoudre le même problème! Merci - Juan Carlos Moreno

Je vais le faire ici. Comme l'a dit Scheffer, vous êtes sur un commit "sans tête". Comme ColinM dit, vous pouvez fusionner ce commit retour à maître comme ceci:

cd lib/mongodb-php-odm 
git checkout master 
git merge [email protected]{1} 
git push origin master 

EDIT: Utilisation [email protected]{1} au lieu d'une branche temporaire ou une étiquette est plus simple car il n'y a pas de nettoyage nécessaire. L'expression [email protected]{1} signifie la valeur précédente de HEAD qui, dans ce cas, serait la nouvelle validation sur la branche headless.

+0

S'il vous plaît inclure quelques explications de ce que vous faites et comment il résout le problème. – Barmar

+1

@Barmar, git-submodules va vérifier un commit spécifique, pas une branche, donc il laisse des sous-dépôts avec des "têtes détachées". Ces étapes (suggérées par ColinM) fusionnent le commit actuel dans la branche 'master' avant de pousser. – cdunn2001