2009-05-04 16 views
193

Sto lavorando su un repository git locale. Ci sono due rami, master e feature_x.Come si spinge un solo ramo Git (e nessun altro ramo)?

Voglio spingere feature_x sul repository remoto, ma non voglio spingere le modifiche sul ramo master.

Sarà un git push origin feature_x dal mio ramo feature_x (il ramo feature_x esiste già sul telecomando) lavoro?

Non voglio testare questo sulla mia scatola, perché non posso spingere a padroneggiare adesso.

+0

Dai un'occhiata qui: [remote] (http://git.or.cz/course/svn.html#remote) e qui: [inserisci un ramo su github] (http://github.com/guides/push-a-branch-to-github) Sembra che funzionerebbe. –

risposta

307

sì, basta fare le seguenti

git checkout feature_x 
git push origin feature_x 
+48

Con git moderno dovresti essere in grado di "git push origin HEAD", o anche "git push HEAD" per spingere solo il ramo attualmente estratto. –

+2

È necessario effettuare il checkout su feature_x? –

+5

sì, perché se si è su master, proverebbe a spingere il ramo master locale sul ramo feature_x remoto. per non dover fare il checkout per prima cosa dovresti fare "git push origin feature_x: feature_x" – cpjolicoeur

60

Per impostazione predefinita git push aggiorna tutte le filiali remote. Ma puoi configurare git per aggiornare solo il ramo corrente al suo upstream.

git config push.default upstream 

Significa che git aggiornerà solo il ramo corrente (estratto) quando si esegue git push.

Altre opzioni valide sono:

  • nothing: Non spingere nulla (errore out) a meno che un refspec è dato esplicitamente. Questo è pensato principalmente per le persone che vogliono evitare gli errori essendo sempre espliciti.
  • matching: Spingere tutti i rami con lo stesso nome su entrambe le estremità. (opzione predefinita prima di Ver 1.7.11)
  • upstream: Spingere il ramo corrente sul ramo a monte. Questa modalità ha senso solo se si sta spingendo verso lo stesso repository che verrebbe normalmente utilizzato (ovvero il flusso di lavoro centrale ). Non è necessario avere lo stesso nome per il ramo locale e remoto.
  • tracking: Obsoleto, utilizzare invece upstream.
  • current: Spingere il ramo corrente nella diramazione remota dello stesso nome sul lato ricevente. Funziona sia in flussi di lavoro centrali che non centrali.
  • simple: [disponibile dal Ver 1.7.11] nel flusso di lavoro centralizzato, funziona come upstream con una maggiore sicurezza per rifiutare di push se il nome del ramo upstream è diverso da quello locale. Quando si preme su un telecomando diverso dal telecomando normalmente utilizzato, operare come current. Questa è l'opzione più sicura ed è adatta ai principianti. Questa modalità è diventata l'impostazione predefinita in Git 2.0.
+2

Grazie, 'current' era quello che stavo cercando, per impostazione predefinita' git push' nel ramo 'foo' lo spingerà al 'origine/foo' ramo. – Dorian

+0

@Dorian, sono d'accordo sul fatto che 'corrente' abbia più senso come predefinito. –

+0

@Dorian, @ Zoltán - Sento che 'simple' ha più senso di default. Ho aggiornato la risposta con "quando usare cosa". Pls dare un'occhiata. –

4

Minor update sulla parte superiore del Karthik Bose's answer - è possibile configurare git a livello globale, di influenzare tutte le aree di lavoro di comportarsi in questo modo:

git config --global push.default upstream 
+0

upstream non è stato riconosciuto come impostazione valida per me, ha dovuto mettere 'corrente' invece – grasshopper

-2

Quindi diciamo che avete una foo filiale locale, una chiamata a distanza origine e origine/master di un ramo remoto.

per spingere il contenuto di foo a origin/master, è necessario innanzitutto impostare il suo monte:

git checkout foo 
git branch -u origin/master 

quindi si può spingere a questo ramo utilizzando:

git push origin HEAD:master 

Nel l'ultimo comando puoi aggiungere --force per sostituire l'intera cronologia dell'origine/master con quella di foo.

Problemi correlati