git push al ramo specifico


102

Anche dopo aver letto questa domanda: git-push-current-branch , ho ancora difficoltà a capire come dovrei scrivere il mio comando git push. Come accennato nel collegamento alla domanda, non è chiaro dalla documentazione.

Vorrei usare il mio esempio del "mondo reale". Di seguito è riportato ciò che vedo quando eseguo un git statuscomando nel livello superiore del mio ramo:

Sul ramo amd_qlp_tester

Il tuo ramo è davanti a "origin / amd_qlp_tester" di 5 commit.

eccetera...

Quindi il nome del mio ramo è amd_qlp_testerma è stato "ramificato" dal ramo principale (se ho i termini sbagliati è a causa del mio background SVN). Ma poi c'è anche il nome `origin / amd_qlp_testser '

Quindi come formulo il mio comando push?

È uno dei seguenti:

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push

Risposte:


92

git push origin amd_qlp_testerlavorerà per te. Se digiti solo git push, il valore predefinito è il telecomando del ramo corrente.

La sintassi di push è simile a questa - git push <remote> <branch>. Se guardi il tuo .git/configfile remoto in , vedrai una voce [remote "origin"]che specifica l'URL del repository. Quindi, nella prima parte del comando dirai a Git dove trovare il repository per questo progetto, quindi specifichi semplicemente un ramo.


Grazie per questo :), puoi spiegare perché sono due "parole" origin amd_qlp_testserorigin/amd_qlp_tester
separate

L'impostazione predefinita "remoto" si basa sulla configurazione del ramo corrente (in questo caso lo sarà effettivamente origin). Il ramo (i) a cui inviare i valori predefiniti (nelle versioni correnti di git) :se non impostato, il che significa matching, ma che dovrebbe cambiare in futuro.
torek

Sono un po 'confuso, sto usando v2.10, quando digito git pushcerca di spingere tutti i rami tracciati, contrariamente a quanto hai detto ("il telecomando del ramo corrente è il valore predefinito").
Roberto

Git 2.x dovrebbe usare la simplestrategia push, il che significa che spingerà solo il ramo corrente. blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Petr Mensik

fatal: Couldn't find remote ref branch-name-here
doug65536

112

Se il tuo ramo locale e quello remoto hanno lo stesso nome, puoi semplicemente farlo:

git push origin branchName

Quando il nome del tuo ramo locale e remoto è diverso, puoi farlo semplicemente:

git push origin localBranchName:remoteBranchName

Questo è stato molto utile, difficile da trovare :)
Pe Dro

Sì, hai ragione, anche difficile da ricordare!
Imranmadbar

8

Le risposte in questione a cui ti sei collegato riguardano la configurazione di git in modo che tu possa inserire git pushcomandi molto brevi e fargli fare quello che vuoi. Il che è fantastico, se sai cosa vuoi e come scriverlo in Git-Ese, ma sei nuovo in git! :-)

Nel tuo caso, la risposta di Petr Mensik è quella (beh, "a") giusta. Ecco perché:

Il comando si radica nel file per trovare il nome "remoto" (ad esempio ). Il file di configurazione elenca:git push remote.git/configorigin

  • dove (in termini di URL) quel remoto "vive" (ad es. )ssh://hostname/path
  • dove vanno le spinte, se diverse
  • cosa viene spinto, se non hai detto quali rami spingere
  • cosa viene recuperato quando corri git fetch remote

Quando hai clonato per la prima volta il repository, ogni volta che era, git ha impostato i valori predefiniti per alcuni di questi. L'URL è qualunque cosa tu abbia clonato e il resto, se impostato o non impostato, sono tutti valori predefiniti "ragionevoli" ... o, hmm, sono ?

Il problema con questi è che le persone hanno cambiato idea, nel tempo, su ciò che è "ragionevole". Quindi ora (a seconda della versione di git e se hai configurato le cose in dettaglio), git potrebbe stampare molti avvisi sui cambiamenti di default in futuro. L'aggiunta del nome del "ramo da spingere" - amd_qlp_tester- (1) lo chiude e (2) spinge solo quel ramo.

Se vuoi spingere più comodamente, puoi farlo con:

git push origin

o anche:

git push

ma se questo fa quello che vuoi, dipende dal fatto che tu sia d'accordo con i "primi autori git" sul fatto che i valori predefiniti originali siano ragionevoli, o "autori successivi git" che i valori predefiniti originali non siano ragionevoli. Quindi, quando vuoi fare tutte le cose di configurazione (eventualmente), vedi la domanda (e le risposte) a cui ti sei collegato.

Per quanto riguarda il nome origin/amd_qlp_testerin primo luogo: si tratta in realtà di un'entità locale (un nome tenuto all'interno del tuo repository), anche se si chiama "ramo remoto". È la migliore ipotesi di git su "dov'è amd_qlp_testerlaggiù". Git lo aggiorna quando può .


1
Grazie per la spiegazione, penso di aver capito ora. Mi piace essere preciso, quindi mi git push origin amd_qlp_tester
atterrò

2

Vorrei aggiungere una risposta aggiornata - ora uso git da un po ', trovo che utilizzo spesso i seguenti comandi per eseguire qualsiasi spinta (usando la domanda originale come esempio):

  • git push origin amd_qlp_tester- push al ramo situato nel remoto chiamato originsul ramo remoto chiamato amd_qlp_tester.
  • git push -u origin amd_qlp_tester- uguale al precedente, ma imposta il collegamento a monte del ramo locale al ramo remoto in modo che la prossima volta tu possa usare solo git push/pullse non già collegato (basta farlo una volta).
  • git push - Una volta impostato l'upstream, puoi utilizzare questa versione più breve.

L' -u opzione Nota è la versione breve di --set-upstream: sono la stessa cosa.

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.