Non sono esattamente sicuro di come sia il vostro repository ma ecco lo scenario peggiore.
Supponiamo che il vostro repository origin
assomiglia a questo
origin:
o---o---A---B---C master
E repository locale assomiglia a questo,
JimPuls:
o---o---A---B---C master, origin/master
\
D---E---F topic1
Poi, dopo che il ramo rinomina repository locale si presenta così:
JimPuls:
o---o---A---B---C old_master, origin/master
\
D---E---F master
Ora, quando si preme master
a origin
che sarà un aggiornamento non veloce. Dopo la spinta, il repository origin
sarà simile a questa:
origin:
o---o---A...B...C (B & C are orphaned commits)
\
D---E---F master
Questo può essere crudele con i tuoi amici che possono aver fatto impegna in cima C
. Per esempio, se di Sally stava lavorando con voi il suo repository può apparire come segue:
Sally:
o---o---A---B---C origin/master
\
G---H---I master
Ora, se fate la vostra spinta non fast-forward e Sally fa un fetch
suo repository sarà simile a questa:
Sally:
D---E---F origin/master
/
o---o---A---B---C
\
G---H---I master
Ora Sally deve capire come riportare il lavoro (G, H, I) nel repository.Se esegue semplicemente un'unione con origin/master
, le modifiche in B e C torneranno nel repository (oops!). Invece, lei dovrà cherry-pick
o rebase
il suo G-H-I cambia su origin/master
.
È fantastico che Git ti consenta di farlo, ma è un po 'come chiedere dei problemi. Speri davvero che Sally noti la situazione. Questo è il motivo per cui dovresti avvisare tutti gli altri contributori quando fai questo in modo che possano gestire il cambiamento in modo appropriato.
NOTA: quanto sopra è uno scenario peggiore. Se la filiale topic1
è partita da master
in C, la modifica è un avanzamento rapido e non ci sono problemi.
buona spiegazione – Sujoy