2011-11-10 16 views
9

ho fatto:Git: come passare da "nessun ramo" a un nuovo ramo remoto?

git co upstream/master # To no branch. 
<then did a trivial edit on some file...> 
git commit -a -m "Trivial edit" 
git push origin NewBranch 

ma ha ottenuto questo:

$ git push origin ignore-netbeans-config 
error: src refspec ignore-netbeans-config does not match any. 

Posso spingere ad un nuovo ramo senza creare una locale?

+0

Bella domanda! Ovviamente, se puoi apportare ulteriori modifiche qui, vorresti andare avanti e creare una filiale per essere al sicuro. – Cascabel

risposta

10

di Let chiarire un paio di piccoli dettagli: primi

  1. Un ramo è un "ref" sotto la refs/heads namespace. Solo ls .git/refs/heads e cat i file lì per vedere cosa intendo.
  2. Un tag è "ref" sotto lo spazio dei nomi refs/tags. Solo ls .git/refs/tags per vedere di persona.
  3. HEAD solo un altro "ref", ma è speciale nell'aspetto che può essere "simbolico". Solo cat .git/HEAD e guarda cosa dice.

Un'operazione push opera su un "ref" e il "mapping" predefinito mantiene lo spazio dei nomi. Ciò significa che quando spingo un ramo, apparirà come un ramo sul telecomando; quando spingo un tag, verrà visualizzato come tag sul telecomando. Prendere in considerazione i seguenti scenari:

  1. voglio spingere il tag moo e farla apparire come un ramo sul server remoto (sì, sto essenzialmente "convertire" un tag in un ramo). Questo è il modo lo farò:

    git push origin moo:refs/heads/moo

  2. Git ha bisogno di un modo per distinguere tra fast-forward e non ff spinge, in modo che la gente non finiscono per sovrascrivere il lavoro di altre persone per errore. Diciamo che voglio spingere i rami master, next e pu, di cui solo pu non-ff. Questo è come io lo farò (si noti che è necessario fornire un mapping esplicito quando si utilizza +):

    git push origin master next +pu:pu

  3. Ora, veniamo alla tua domanda. Volete spingere il vostro HEAD in modo che compaia nello spazio dei nomi refs/heads sul telecomando come un ramo chiamato "ignore-netbeans-config". Se questo ramo non esisteva prima o se stai sovrascrivendo alcuni commit in esso (cioè non-ff push), usa +. Altrimenti, non farlo. Risultato finale:

    git push origin +HEAD:refs/heads/ignore-netbeans-config

TL; DR versione: git push origin +HEAD:refs/heads/ignore-netbeans-config

+0

Grazie per la spiegazione! –

11

provare

git push origin HEAD:refs/heads/ignore-netbeans-config 
+0

Ah, funzionerebbe. +1. – manojlds

+0

Dovresti poter omettere la parte "refs/heads /" di esso. –

+0

@AdamDymitruk, Questo è quello che ho provato - non ha funzionato. –

Problemi correlati