Dovresti essere in grado di forzare la revisione locale al repository remoto utilizzando
git push -f <remote> <branch>
(ad es git push -f origin master
.). Uscire <remote>
e <branch>
forzare spingere tutti i rami locali che si sono stabiliti --set-upstream
.
Basta essere avvisati, se altre persone condividono questo repository la loro cronologia delle revisioni sarà in conflitto con quella nuova. E se hanno qualche commit locale dopo il punto di cambiamento diventeranno non validi.
Aggiornamento : ho pensato di aggiungere una nota a margine. Se si stanno creando modifiche che verranno esaminate da altri, non è insolito creare una succursale con tali modifiche e riformularle periodicamente per mantenerle aggiornate con la succursale di sviluppo principale. Fai semplicemente sapere agli altri sviluppatori che ciò accadrà periodicamente, così sapranno cosa aspettarsi.
Aggiornamento 2 : a causa del numero crescente di spettatori, vorrei aggiungere alcune informazioni aggiuntive su cosa fare quando upstream
si verifica una spinta forzata.
Supponiamo di aver clonato il tuo repository e di aver aggiunto alcuni commit in questo modo:
D ---- E argomento
/
A ---- B ---- C sviluppo
Ma più tardi il development
ramo viene colpito con un rebase
, che mi farà ricevere un errore simile quando corro git pull
:
Disimballaggio degli oggetti: 100% (3/3), fatto.
Da <repo-location>
* sviluppo filiale -> FETCH_HEAD
Unione automatica <file>
CONFLICT (contenuto): unisci conflitto in <locations>
Unione automatica non riuscita; correggere i conflitti e quindi eseguire il commit del risultato.
Qui potrei risolvere i conflitti e commit
, ma questo mi lascerebbe con una storia di commessa davvero brutta:
C ---- D ---- E ---- F argomento
/ /
A ---- B -------------- C 'sviluppo
Potrebbe sembrare allettante da usare, git pull --force
ma fai attenzione perché ti lascerà con commit incagliati:
D ---- E argomento
A ---- B ---- C 'sviluppo
Quindi probabilmente l'opzione migliore è fare un git pull --rebase
. Questo mi richiederà di risolvere eventuali conflitti come prima, ma per ogni passaggio invece di impegnarmi lo userò git rebase --continue
. Alla fine la cronologia del commit avrà un aspetto molto migliore:
Argomento D '--- E'
/
A ---- B ---- C 'sviluppo
Aggiornamento 3: puoi anche usare l' --force-with-lease
opzione come spinta di forza "più sicura", come menzionato da Cupcake nella sua risposta :
La spinta forzata con un "lease" consente alla spinta forzata di fallire se ci sono nuovi commit sul telecomando che non ti aspettavi (tecnicamente, se non li hai ancora recuperati nel tuo ramo di monitoraggio remoto), che è utile se non vuoi sovrascrivere accidentalmente i commit di qualcun altro di cui non sapevi ancora nulla e vuoi solo sovrascrivere i tuoi:
git push <remote> <branch> --force-with-lease
Puoi scoprire maggiori dettagli su come usare --force-with-lease
leggendo uno dei seguenti:
git push origin --force
ha funzionato per te?