/ / Git spinge al master - git, version-control, git-flow

Git spinge a padroneggiare - git, version-control, git-flow

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 № 1

La 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 su a, questo spingerà a origin/a. Se sei nel ramo b o c questo sarà creare un ramo con lo stesso nome su origin.
  • upstream: spinga il ramo corrente al suo nome upstream corrispondente. Se sei su a, questo spingerà a origin/a. Se sei su b, ti spingerai a origin/longb. Se sei su c riceverai un errore: The current branch c has no upstream branch.
  • simple: Simile a upstream ma fallisce se il nome del ramo upstream non corrisponde al nome del ramo locale. Se sei su a, questo spinge a a; se sei su entrambi b o c otterrai un errore
  • matching: Spingere tutti i rami che hanno lo stesso nome. Da b e longb sono diversi e c non esiste ancora sul telecomando, indipendentemente dal ramo in cui ti trovi, dovrai solo spingere a.

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.