Možen dvojnik:
Naj bo trenutna veja Git glavna veja
V svoji shrambi Git imam dve veji:
master
seotweaks
(prvotno ustvarjena iz master
)Ustvaril sem seotweaks
z namenom, da ga hitro združim nazaj v master
. Vendar se je to zgodilo pred tremi meseci in koda v tej veji je za 13 različic naprednejša od tiste v veji master
.
Dejansko je postala naša delovna glavna veja, saj je vsa koda v veji master
zdaj bolj ali manj zastarela.
Vem, da je to zelo slaba praksa.
Ali veste, kako lahko zamenjam vso vsebino veje master
s tisto v veji seotweaks
?
Lahko bi samo izbrisal vse v veji master
in jo združil, vendar se mi to ne zdi najboljša praksa.
Morali bi biti sposobni uporabiti strategijo združevanja "ours", da prepišete master s seotweaks, kot je ta:
git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks
Rezultat bi moral biti, da je vaš master zdaj v bistvu seotweaks.
(-s naš
je kratica za --strategija=vaša
)
Iz dokumentacije o strategiji 'ours':
Ta razreši poljubno število glav, vendar je rezultat združitve vedno drevo trenutne glave veje, pri čemer se dejansko zanemarijo vse spremembe iz vseh drugih vej. Uporablja se za nadomestitev stare zgodovine razvoja stranskih vej. Upoštevajte, da se razlikuje od možnosti -Xours za strategijo rekurzivnega združevanja.
Posodobitev na podlagi komentarjev: Če se pojavi usodni rezultat: odklanjanje združitve nepovezane zgodovine
, spremenite drugo vrstico v to: git merge --allow-unrelated-histories -s ours master
Kaj pa če bi z uporabo git branch -m preimenovali vejo master v drugo in nato preimenovali vejo seotweaks v master? Nekaj takega:
git branch -m master old-master
git branch -m seotweaks master
git push -f origin master
To lahko odstrani oddaje v origin master, zato preverite svoj origin master, preden zaženete git push -f origin master
.
Na oddaljenem strežniku lahko preimenujete/odstranite vejo master, vendar bo to težava, če je veliko ljudi svoje delo opravilo na oddaljeni veji master in so to vejo prenesli v svoj lokalni rep.
V tem primeru morda ne bo tako, saj se zdi, da vsi delajo na veji 'seotweaks
'.
V tem primeru lahko:
git remote --show morda ne bo deloval.
(Naredite git remote show
, da preverite, kako je vaš oddaljeni strežnik deklariran v vašem lokalnem repu. Predvidevam, da bo 'origin
')
(V zvezi z GitHubom house9 komentira: "Moral sem narediti en dodaten korak, klikniti gumb 'Admin
' na GitHubu in nastaviti 'Default Branch
' na nekaj drugega kot 'master
', nato pa ga nato postaviti nazaj")
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
Toda še enkrat:
reset --hard
svojega lokalnega glavnega mojstra na vejo oddaljenega/ glavnega mojstra, ki jo bodo prenesli, in pozabiti na svojega trenutnega glavnega mojstra.