Sto lavorando nella filiale feature/something
. Quando io faccio git status
, dice:
On branch feature/something
Your branch is up-to-date with "origin/feature/something".
Ma quando ho appena finito git push
, ha spinto tutti i miei cambiamenti in entrambi origin/feature/something
e master
.
Perché potrebbe accadere? Ho pensato per impostazione predefinita git push
spinge al ramo remoto con lo stesso nome. Ho sbagliato?
Ho appena installato git-flow, forse il comportamento predefinito di questo?
risposte:
1 per risposta № 1La variabile configurabile push.default
controlla cosa viene premuto se non si specifica cosa spingere:1
$ git config --get push.default
nothing
(per esempio, questa è un'impostazione che potrei usare a volte). Per gli esempi di seguito, supponiamo che tu abbia dei rami a
, b
, e c
e il tuo telecomando è nominato origin
. Inoltre, diciamo ramo a
é associato a origin/a
-I.è, vedrai messaggi come "Your branch is up-to-date with "origin/a"."
-mentre b
é associato a origin/longb
e c
non ha upstream (ancora).
Ci sono cinque valori possibili:
nothing
: Genera un errore e non spinge nulla.current
: Spingi il ramo corrente, in un ramo con lo stesso nome. Se sei sua
, questo spingerà aorigin/a
. Se sei nel ramob
oc
questo sarà creare un ramo con lo stesso nome suorigin
.upstream
: spinga il ramo corrente al suo nome upstream corrispondente. Se sei sua
, questo spingerà aorigin/a
. Se sei sub
, ti spingerai aorigin/longb
. Se sei suc
riceverai un errore:The current branch c has no upstream branch.
simple
: Simile aupstream
ma fallisce se il nome del ramo upstream non corrisponde al nome del ramo locale. Se sei sua
, questo spinge aa
; se sei su entrambib
oc
otterrai un errorematching
: Spingere tutti i rami che hanno lo stesso nome. Dab
elongb
sono diversi ec
non esiste ancora sul telecomando, indipendentemente dal ramo in cui ti trovi, dovrai solo spingerea
.
Se non hai impostato push.default
del tutto, il default push.default
l'impostazione in git 2.0 è simple
, ma nelle versioni precedenti, lo è matching
. Probabilmente hai una versione precedente di git e stai usando i valori di default (anche se il tuo commento sopra suggerisce qualcosa di più complesso).
Vedere il git config
documentazione per (molto) di più.
1Per specificare cosa spingere, lo fai esplicitamente:
git push origin X:upstream_name_for_X
o:
git push origin Y # this "means" Y:Y
o puoi impostare remote.origin.push
ad un set di refspecs (puoi impostare più di un valore). Puoi anche impostare branch.name.pushremote
per configurazioni particolarmente esoteriche, in cui un ramo ha una upstream per il pull (recupero e fusione-o-rebase) ma un altro posto per la spinta.