Come copiare un ramo Git locale in un repository remoto


127

Finora ho fatto i seguenti passi:

  1. Clonato un repository Git remoto
  2. Ha ramificato il ramo principale in uno sperimentale
  3. codice modificato / testato / impegnato nel ramo sperimentale

Ora, non sono pronto per unire sperimentale al maestro. Tuttavia, desidero rimandarlo al repository remoto poiché è il repository che condivido con alcuni colleghi. Vorrei che vedessero quello che ho fatto nel ramo sperimentale. In genere accedo solo al repository remoto tramite SSH.

Come posso condividere il mio ramo locale sul repository remoto, senza influire sul ramo master del repository remoto?


Questo link è anche molto utile in questo aspetto. Condivisione di rami git
Vishnu Kumar

Risposte:


157

Secondo la pagina del manuale di git push :

 git push origin experimental

Trova un riferimento che corrisponda experimentalal repository di origine (molto probabilmente, lo troverebbe refs/heads/experimental) e aggiorna lo stesso ref (ad esempio refs/heads/experimental) nel repository di origine con esso.
Se experimentalnon esistesse in remoto, verrebbe creato .

Questo è lo stesso di:

git push origin experimental:refs/heads/experimental

Creare il ramo experimentalnel repository di origine copiando il experimentalramo 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 da solo funzionerà.

Oppure, come menzionato in git tip , puoi configurare un "Remote's Default Remote":

Puoi usare git config per assegnare un telecomando predefinito a un determinato ramo. Questo telecomando predefinito verrà utilizzato per inviare quel ramo se non diversamente specificato.

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

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

può essere usato per specificarlo manualmente.


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

Per ogni ramo aggiornato o inviato correttamente, aggiungi il riferimento upstream (tracking), usato da git-pull (1) senza argomenti e altri comandi.

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

git push -u origin experimental

12
È necessario utilizzare l' -uopzione per pushassicurarsi che la propria filiale locale segua quella remota dopo averla resa pubblica. Se dimentichi di usare l' -uopzione, puoi semplicemente digitare git push -usuccessivamente nel ramo, quindi git pullfunzionerà.
Jan

Ho notato che quando lo fai git push origin experimental, non ci sono prove di eventuali pacchetti caricati. Sembra che il telecomando abbia già tutto il materiale della tua precedente spinta; deve solo essere agganciato agli arbitri .
Kaz

@Kaz: avrebbe tutto il materiale se quei nuovi commit fossero già stati inseriti in un'altra filiale sul telecomando. In tal caso, git push origin experimentalsarebbe sufficiente creare il ramo experimentalsul telecomando.
VonC

Grazie! La tua risposta è stata molto utile.
Hacre,

15

Se il nome del tuo ramo è experimentale il nome del telecomando è origin, allora lo è

git push origin experimental

Stesso commento di cui sopra, ma questo crea implicitamente il ramo sperimentale sul repository remoto o spingerà al master remoto?
Coocoo4Cocoa

1
spinge il ramo sperimentale e non tocca il padrone né sul lato locale né da remoto
John Douthat,

1

git push -u <remote-name> <branch-name>non funziona se il ramo appena creato non viene generato dallo stesso repository, ovvero se non si è creato il nuovo ramo utilizzando git checkout -b new_branch, questo non funzionerà.

Ad esempio, avevo clonato localmente due diversi repository e ho dovuto copiare repo2 / branch1 in repo1 / e quindi spingerlo anch'io.

Questo link mi ha aiutato a spingere il mio ramo locale (clonato da un altro repository) al mio repository remoto:



0

tl; dr

$ git push --set-upstream origin your_new_branch

Ulteriori informazioni

dopo aver effettuato pochi commit nei tuoi:

$ git checkout -b your_new_branch
$ git add file
$ git commit -m "changed file"

spingi il tuo ramo specificando un upstream in uno dei repository remoti come il seguente:

$ git push --set-upstream REMOTE YOUR_BRANCH

i telecomandi possono essere visti da

$ git remote -v

di solito, avrai un solo telecomando predefinito origin. quindi il tuo comando sarebbe simile a:

$ git push --set-upstream origin your_new_branch

e tutte le conseguenti spinte possono essere fatte proprio con git push.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.