2010-12-15 17 views
21

Tengo un proyecto simple que tiene un submódulo.¿No se pueden enviar confirmaciones desde un submódulo de git?

$ git submodule 
964737623a362f6303e87ec41f2c7090c8c2c093 lib/mongodb-php-odm (heads/master-1-g9647376) 

he hecho cambios en submódulo que los entregó, pero no puedo empujarlos a GitHub.

$ 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 

No entiendo por qué se dice "Todo en marcha hasta la fecha" porque el 964737 cometen no ha sido empujado a GitHub. Es probable que haya hecho algo mal, pero no tengo idea de lo que sería ...

¿Cómo envío el último commit en este submódulo a github?

Respuesta

14

Parece que no se ha comprometido a ninguna rama, es decir, su confirmación no forma parte de ninguna rama. Cree una sucursal donde se encuentre, y luego ejecute gitk para compararla con la maestra, luego seleccione o restaure según sea necesario.

+8

Gracias, eso me ayudó a ir en la dirección correcta. Estos son los pasos que tomé exactamente, que funcionaron como un encanto. Parece bastante simple ahora ... git checkout -b temp; maestro de pago de git; git merge temp; git branch -d temp; git push master de origen; – ColinM

+1

Este es generalmente el estado en que estará un submódulo. Cuando un comando del submódulo git verifica una confirmación determinada, lo hace en el modo HEAD desconectado (sin rama desprotegida, solo la confirmación específica). – Cascabel

+2

[qué hacer si se compromete con ninguna rama] (http://edspencer.net/2009/10/git-what-to-do-if-y-commit-to-no-branch.html) es una buena artículo para resolver esta situación. –

5

@ColinM, creo que deberías mover tu comentario a una respuesta, ya que es la solución completa, que me ayudó a resolver el mismo problema! Gracias - Juan Carlos Moreno

Lo haré aquí.

Como dijo Scheffer, estás en un compromiso "sin CABEZA". Como dijo ColinM, puede combinar que cometer de nuevo a maestro así:

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

EDIT: Usando [email protected]{1} en lugar de una rama temporal o etiqueta es más simple ya que no hay limpieza requerida. La expresión [email protected]{1} significa el valor anterior de HEAD, que en este caso sería la nueva confirmación en la rama sin cabeza.

+0

Por favor, incluye alguna explicación de lo que estás haciendo y cómo resuelve el problema. – Barmar

+1

@Barmar, git-submódulos verificará una confirmación específica, no una rama, por lo que deja repositorios con "cabezas separadas". Estos pasos (sugeridos por ColinM) fusionan la confirmación actual en la rama 'maestro' antes de presionar. – cdunn2001

Cuestiones relacionadas