2009-04-30 15 views
125

ho preso le seguenti operazioni finora:Come copiare un ramo Git locale per un repo remoto

  1. clonato un repo Git remoto
  2. ramificata ramo principale ad uno sperimentale
  3. modificato/codice testato/impegnato nel ramo sperimentale

Ora, non sono pronto per unire sperimentale in master. Tuttavia, voglio riportarlo al repository remoto poiché è il repository che condivido con alcuni colleghi. Mi piacerebbe che vedessero quello che ho fatto nel settore sperimentale. Solitamente accedo al repository remoto tramite SSH.

Come si condivide il ramo locale sul repository remoto, senza influire sul ramo master del repository remoto?

+0

Questo collegamento è molto utile anche in questo aspetto. [Condivisione di rami di git] (http://allmybrain.com/2008/09/15/sharing-git-branches/) –

+0

possibile duplicato di [Come si crea un ramo git esistente per tenere traccia di un ramo remoto?] (Http: //stackoverflow.com/questions/520650/how-do-you-make-an-existing-git-branch-track-a-remote-branch) – ahsteele

risposta

155

Secondo git push manual page:

git push origin experimental 

Trova un ref che corrisponde experimental nel repository di origine (molto probabilmente, troverà refs/heads/experimental) e aggiornerà lo stesso riferimento (es. refs/heads/experimental) nel repository di origine con esso.
Se experimental non esiste in remoto, verrà creato.

Questo è lo stesso:

git push origin experimental:refs/heads/experimental 

Creare il ramo experimental nel repository di origine copiando l'experimental ramo corrente.
Questo modulo è necessario solo per creare un nuovo ramo o tag nel repository remoto quando il nome locale e il nome remoto sono diversi; altrimenti, il nome di riferimento funzionerà da solo.

Oppure, come menzionato in git tip, è possibile impostare "Default Ramo remoto" a:

È possibile utilizzare git config per assegnare un default remoto per un determinato settore. Questo telecomando predefinito verrà utilizzato per inviare quel ramo se non diversamente specificato.

Questo è già stato fatto per te quando usi git clone, permettendoti di usare git push senza argomenti per spingere il ramo master locale per aggiornare il ramo master del repository di origine.

git config branch.<name>.remote <remote> 

può essere utilizzato per specificare questo manualmente.


Jan suggerisce (per git >= 1.7.0) la push -u (o push --set-upstream) opzione:

Per ogni tralcio che è fino a data o spinto con successo, aggiungere a monte (tracking) di riferimento, utilizzato da senza argomento git-pull (1) e altri comandi.

In questo modo, non è necessario eseguire alcuna configurazione di git.

git push -u origin experimental 
+12

È necessario utilizzare l'opzione '-u' per' push' per assicurarsi che il ramo locale tenga traccia di quello remoto dopo averlo reso pubblico. Se dimentichi di usare l'opzione '-u', puoi semplicemente digitare' git push -u' in seguito nel ramo, quindi 'git pull' funzionerà. – Jan

+0

@ Jan: buon punto. L'ho incluso nella risposta. – VonC

+0

Ho notato che quando si esegue questa operazione 'git push origin experimental', non vi è alcuna evidenza di pacchetti caricati. Sembra che * il telecomando abbia già tutto il materiale della tua precedente spinta; deve solo essere collegato agli arbitri *. – Kaz

15

Se il nome del ramo è experimental, e il nome del remoto è origin, allora è

git push origin experimental 
+0

Lo stesso commento di cui sopra, ma crea il ramo sperimentale implicitamente sul repository remoto o lo spinge al master remoto? – Coocoo4Cocoa

+1

spinge il ramo sperimentale e non tocca il master sul lato locale o in remoto –

1

git push -u <remote-name> <branch-name> non funziona se il ramo appena creato non viene generato dallo stesso pronti contro termine, vale a dire se non si è creato il nuovo ramo utilizzando git checkout -b new_branch, allora questo non funzionerà.

Ad esempio, ho clonato due repository diversi localmente e ho dovuto copiare repo2/branch1 su repo1/e poi premerlo anche.

This legame mi ha aiutato a spingere il mio ramo locale (clonato da un altro repo) al mio repo remoto:

Problemi correlati