È importante a quale ramo spingo?

3

La mia domanda riguarda il modo in cui le spinte di ramo funzionano esattamente; Mi sono imbattuto in qualcosa che per me non ha senso logico e in quanto tale mi piacerebbe una spiegazione sul perché sto vivendo questo comportamento.

Ho due rami: master e dashboard .

I am on (check out) dashboard . Apporto alcune modifiche e (usando il terminale) scrivo quanto segue:

git add file1.R
git commit -m "Updated loop."
git push origin dashboard

La mia comprensione è che questo ora spinge le modifiche confermate nel mio repository sotto il ramo dashboard .

Tuttavia, per curiosità, ho provato anche questo (mentre ancora controllato su dashboard :

git add file1.R
git commit -m "Updated loop."
git push origin master

Nonostante specifichi che voglio spingere a master , le modifiche confermate sembrano essere state trasferite a dashboard perché quando controllo master (sia tramite una GUI che git log -1 ), vedo che il le modifiche non sono state trasferite a master , ma a dashboard .

In quanto tale, qual è la rilevanza di specificare quale ramo spingere? Il motivo per cui lo chiedo è perché sembra che il ramo in cui vengono trasferite le modifiche confermate corrisponda a qualsiasi ramo al momento ho estratto / sto spingendo da.

git push equivale a digitare git push origin master / git push origin dashboard (a seconda del ramo che ho estratto)?

Sarebbe bello capire esattamente cosa sta succedendo qui.

    
posta MusTheDataGuy 20.11.2018 - 12:50
fonte

1 risposta

7

Ho sorvolato alcune cose per non perdere di vista. Controlla man git help per il nitty-gritty.

git push da solo dice "spinga il mio ramo corrente al suo ramo upstream corrispondente".

git push origin xyz dice "push my xyz branch al suo corrispondente ramo in origin ". Dice non "spinga il mio ramo corrente a origin " xyz , anche se è un'ipotesi molto facile da fare.

Per fare ciò che pensavi di fare, usa qualcosa come git push origin dashboard:master ("spinga il mio dashboard ramo a master in origin "). Questo è sicuro nel senso che funzionerà solo se il ramo che stai spingendo è aggiornato con il ramo che stai spingendo a , così da non perdere la cronologia.

git push è abbastanza flessibile (di nuovo, vedi il manuale per i dettagli), ma le parti pertinenti possono essere riassunte come:

git push [remote [source][:destination]]

Cioè, se si specifica un telecomando (come origin ) è possibile specificare una sorgente (locale) da cui inviare e un ramo di destinazione (sul telecomando) da inviare a.

  • Senza fonte né destinazione, invierà il ramo corrente al relativo ramo upstream corrispondente.
  • Con solo una fonte, sposterà quel ramo al suo ramo upstream corrispondente.
  • Con una sola destinazione, non "spinge nulla" su quel ramo, che significa eliminarlo sul telecomando.
  • Con entrambi, puoi inserire un ramo locale in uno che non è quello corrispondente predefinito.
  • Il sorgente non deve essere un ramo - può essere HEAD ("ramo corrente"), master~1 ("commit precedente su master ), ecc.
risposta data 20.11.2018 - 13:20
fonte

Leggi altre domande sui tag