Possibile duplicato:
Rendere il ramo Git corrente un ramo master
Ho due rami nel mio repository Git:
master
.seotweaks
(creato originariamente da master
)Ho creato seotweaks
con l'intenzione di fonderlo rapidamente in master
. Tuttavia, questo è stato tre mesi fa e il codice in questo ramo è 13 versioni avanti rispetto a master
.
È effettivamente diventato il nostro ramo principale di lavoro, dato che tutto il codice in master
è più o meno obsoleto ora.
Pessima pratica, lo so, lezione imparata.
Sai come posso sostituire tutto il contenuto del ramo master
con quello di seotweaks
?
Potrei semplicemente cancellare tutto in master
e unire, ma questa non mi sembra una buona pratica.
Dovreste essere in grado di usare la strategia di fusione "ours" per sovrascrivere master con seotweaks come questo:
git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks
Il risultato dovrebbe essere che il tuo master è ora essenzialmente seotweaks.
(-s ours
è l'abbreviazione di --strategy=ours
)
Da i documenti sulla 'nostra' strategia:
Questo risolve qualsiasi numero di teste, ma l'albero risultante dal merge è sempre quello della testa del ramo corrente, ignorando effettivamente tutte le modifiche da tutti gli altri rami. È pensato per essere usato per sostituire la vecchia storia di sviluppo dei rami laterali. Nota che questo è diverso dall'opzione -Xours della strategia di fusione ricorsiva.
Aggiornamento dai commenti: Se ottieni fatal: refusing to merge unrelated histories
, allora cambia la seconda linea in questa: git merge --allow-unrelated-histories -s ours master
Che ne dici di usare git branch -m per rinominare il ramo master in un altro, quindi rinominare il ramo seotweaks in master? Qualcosa del genere:
git branch -m master old-master
git branch -m seotweaks master
git push -f origin master
Questo potrebbe rimuovere i commit in origin master, per favore controlla il tuo origin master prima di eseguire git push -f origin master
.
Puoi rinominare/rimuovere il master su remoto, ma questo sarà un problema se molte persone hanno basato il loro lavoro sul ramo master remoto e hanno tirato quel ramo nel loro repo locale.
Questo potrebbe non essere il caso dato che tutti sembrano lavorare sul ramo 'seotweaks
'.
In questo caso è possibile:
git remote --show potrebbe non funzionare.
(Fai un git remote show
per controllare come il tuo remoto è dichiarato all'interno del tuo repo locale. Assumerò 'origin
')
(Per quanto riguarda GitHub, house9 commenta: "Ho dovuto fare un passo in più, cliccare il pulsante 'Admin
' su GitHub e impostare il 'Default Branch
' a qualcosa di diverso da 'master
', poi rimetterlo a posto dopo")
git branch -m master master-old # rename master on local
git push origin :master # delete master on remote
git push origin master-old # create master-old on remote
git checkout -b master seotweaks # create a new local master on top of seotweaks
git push origin master # create master on remote
Ma di nuovo:
resettare --hard
il loro master locale al ramo remoto/master che andranno a prendere, e dimenticare il loro master attuale.