2010-12-15 19 views
21

Ho un progetto semplice che ha un sottomodulo.Impossibile inviare commit da un sottomodulo git?

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

ho fatto modifiche a tale modulo e li impegna, ma non li può spingere 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 

Non capisco il motivo per cui si dice "Tutto up-to-date", perché il 964.737 commit non è stato spinto a github. È probabile che abbia fatto qualcosa di sbagliato, ma non ho idea di cosa sarebbe.

Come faccio a trasmettere l'ultimo commit in questo sottomodulo a github?

risposta

14

Sembra che tu non ti sia impegnato in nessun ramo, cioè il tuo commit non fa parte di alcun ramo. Crea un ramo in cui ti trovi, quindi avvia Gitk per il confronto con il master, quindi seleziona il cherry o rebase se necessario.

+8

Grazie, mi ha fatto andare nella giusta direzione. Ecco i passaggi che ho fatto esattamente, che hanno funzionato come un fascino. Sembra piuttosto semplice ora ... git checkout -b temp; git checkout master; git si fondono temp; git branch -d temp; git push origin master; – ColinM

+1

Questo è generalmente lo stato in cui si troverà un sottomodulo. Quando un comando di sottomodulo git controlla un dato commit, lo fa in modalità HEAD distaccata (nessun ramo estratto, solo il commit specifico). – Cascabel

+2

[cosa fare se non si esegue il commit a nessun ramo] (http://edspencer.net/2009/10/git-what-to-if-you-commit-to-no-branch.html) è un buon articolo per risolvere questa situazione. –

5

@ColinM, penso che dovresti spostare il tuo commento a una risposta perché è la soluzione completa, che mi ha aiutato a risolvere esattamente lo stesso problema! Grazie - Juan Carlos Moreno

Lo farò qui.

Come ha detto Scheffer, si è impegnati in un impegno "senza testa". Come ha detto ColinM, è possibile unire che commettono torna a maestro come questo:

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

EDIT: Usando [email protected]{1} invece di un ramo temporaneo o tag è più semplice in quanto non v'è alcuna pulizia richiesto. L'espressione [email protected]{1} indica il valore precedente dell'HEAD che in questo caso sarebbe il nuovo commit sul ramo headless.

+0

Ti preghiamo di includere alcune spiegazioni su cosa stai facendo e come risolve il problema. – Barmar

+1

@Barmar, i sottomoduli git eseguiranno il checkout di un commit specifico, non di un ramo, quindi lascerà i sub-repos con "teste distaccate". Questi passaggi (suggeriti da ColinM) uniscono il commit corrente nel ramo 'master' prima di premere. – cdunn2001

Problemi correlati