a fondere le mie modifiche nei confronti di un maestro a monte, ho spesso ritrovo a fare la seguente:sovrascrittura e spingendo un Git Branch
git checkout somefeature
git checkout -b integration
git rebase master # resolving conflicts along the way
git checkout somefeature
git merge integration # or rebase, doesn't matter in this example
io spesso trovo che la fusione del ramo integrazione di nuovo nel mio ramo caratteristica non riesce fare ad alcuni conflitti La prima domanda che ho è: "perché sta succedendo se il mio ramo di integrazione è un discendente di qualche caratteristica e ho già risolto i conflitti con il master upstream?"
Se ti stai chiedendo perché sto usando un ramo di integrazione, è per evitare di inquinare il mio ramo corrente con un'unione mezza fallita.
mia soluzione attuale è quella di fare questo:
git checkout integration
git branch -f somefeature # overwrite the branch
Il problema ora è che non riesco a spingere i miei cambiamenti di nuovo ad una filiale remota:
git push origin somefeature
! [rejected] somefeature -> somefeature (non-fast forward)
Così ora devo togliere la filiale remota e ri-spingere le mie modifiche. Questo non può essere il modo ottimale per farlo, quindi mi chiedo "qual è il modo migliore per sovrascrivere un ramo e inviare le modifiche a un ramo remoto?"
Nota comunque che non dovresti mai cambiare i commit già pubblicati, poiché gli altri che lavorano con te si imbatteranno negli stessi problemi che hai, che hanno già commessi duplicati e incompatibili già nel loro repository. Il rebasing va bene fintanto che è solo locale, ma ribadire commit e ripubblicarli è malvagio - da qui l'errore "rifiutato" * di Git (è intelligente e nota che probabilmente stai facendo qualcosa di sbagliato). – poke
Ah, stavo usando l'unione per comodità di risoluzione dei conflitti passo a passo senza considerare che i commit non sarebbero discendenti del ramo qualche caratteristica. Accettandolo come la vera risposta alla mia domanda. Grazie mille! – tmountain