Kaip pakeisti pagrindinį filialą „Git“, visiškai iš kito filialo?

Galimas dublikatas:
Padarykite dabartinį git šaką pagrindiniu filialu

Turiu du filialus mano „Git“ saugykloje:

  1. master
  2. seotweaks (iš pradžių sukurtas master )

Aš sukūriau seotweaks , norėdamas greitai seotweaks jį atgal į master . Tačiau tai buvo prieš tris mėnesius, o kodas šioje temoje yra 13 versijų prieš master .

Tai iš tikrųjų tapo mūsų darbo meistru, nes dabar visi master kodai master daugiau ar mažiau pasenę.

Labai bloga praktika, aš žinau, kad pamoka.

Ar žinote, kaip galiu pakeisti visą master filialo turinį su tais, kurie yra seotweaks ?

Galėčiau tiesiog ištrinti viską, kas yra master ir sujungti, tačiau tai nėra geriausia praktika.

1319
19 мая '10 в 6:06 2010-05-19 06:06 Jasonas paklausė gegužės 19 d. 10 val. 06:06 2010-05-19 06:06
@ 5 atsakymai

Turėtumėte naudoti „mūsų“ sujungimo strategiją, kad perrašytume vedlį naudojant „seotweaks“:

 git checkout seotweaks git merge -s ours master git checkout master git merge seotweaks 

Rezultatas turėtų būti jūsų šeimininkas dabar, iš tikrųjų, seotweaks.

( -s ours sutrumpintas iki --strategy=ours )

Iš „mūsų“ strategijos dokumentacijos :

Tai leidžia bet kokį skaičių galų, tačiau gautas sujungimo medis visada reiškia dabartinę šakos šaką, efektyviai ignoruojant visus pokyčius iš visų kitų šakų. Jis skirtas pakeisti seną šoninių šakų raidos istoriją. Atkreipkite dėmesį, kad tai skiriasi nuo rekursinio sujungimo strategijos -Xours parinkties.

2310
19 мая '10 в 7:51 2010-05-19 07:51 atsakymas duotas ergosys gegužės 19, 10, 7:51 2010-05-19 07:51

Kaip apie „git“ filialą -m naudoti pagrindinio filialo pervadinimą į kitą ir po to pervadinti „seotweaks“ filialą? Kažkas panašaus:

 git branch -m master old-master git branch -m seotweaks master git push -f origin master 
border=0

Tai gali pašalinti originalo kapitono įsipareigojimą, prieš pradėdamas git push -f origin master , patikrinkite originalųjį git push -f origin master .

385
19 мая '10 в 6:11 2010-05-19 06:11 atsakymas pateikiamas ZelluX gegužės 19, 10, 10:11 2010-05-19 06:11

Jūs galite pervadinti / ištrinti pagrindinio kompiuterio valdiklį, tačiau tai bus problema, jei daugelis žmonių savo darbą grindžia nuotoliniu pagrindiniu filialu ir ištraukė šį padalinį į vietinę repo.
Tai gali būti ne todėl, kad kiekvienas, atrodo, dirba su seotweaks filialu.

Tokiu atveju galite:
Git Remote - rodyti gali neveikti. (Padarykite git remote show kad patikrintumėte, kaip jūsų konsolė reklamuojama jūsų vietinėje repo.
(Kalbant apie „GitHub“ komentarus, house9 : „Reikėjo dar vieną žingsnį, spustelėkite„ Admin “mygtuką„ GitHub “ir nustatykite„ Default Branch “(„ Default Branch “) kitam nei„ master “, tada grąžinkite jį atgal“)

 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 

Bet vėl:

  • jei kiti naudotojai bando ištraukti, kai vedlys pašalinamas iš nuotolinio kompiuterio, jų išėjimai nepavyks („nuotolinio valdymo pulto nėra tokios nuorodos“)
  • Kai magistras atkuriamas nuotoliniame kompiuteryje, traukinys bandys sujungti šį naują valdiklį su vietiniu (dabar senuoju) kapitonu: daugeliu konfliktų. Tiesą sakant, jie turi iš reset --hard savo vietinį meistrą nuotolinio / magistro filialui, kurį jie reset --hard , ir pamiršti apie savo dabartinį pagrindinį.
61
19 мая '10 в 6:57 2010-05-19 06:57 atsakymą pateikė VonC gegužės 19 d., „10, 06:57 2010-05-19 06:57

Kadangi seotweaks iš pradžių buvo sukurta kaip filialas iš master , ji yra gera idėja. Tačiau, jei esate tokioje situacijoje, kai vienas iš jūsų filialų yra ne filialas iš master arba jūsų istorija yra tokia skirtinga, kad tiesiog norite sunaikinti master filialą naudai naujajai pramonei, kurią atlikote, galite tai padaryti:

 git push [-f] origin seotweaks:master 

Tai ypač naudinga, jei gaunate šią klaidą:

 ! [remote rejected] master (deletion of the current branch prohibited) 

Ir nenaudojate „GitHub“ ir neturite prieigos prie skirtuko „Administravimas“, kad pakeistumėte nutolusį nuotolinio saugyklos filialą. Be to, jis nesukels prastovos ar lenktynių sąlygų, kurios gali atsirasti šalinant vedlį:

 git push origin :master 
21
25 июля '12 в 23:44 2012-07-25 23:44 atsakymas pateikiamas mholm815, liepos 25 d., 12 val., 23:44, 2012-07-25 23:44

Manau, kad tai yra geriausias būdas tai padaryti (turėjau problemų su serveriu, kuris neleido man ištrinti).

Serveryje, kuriame saugoma origin saugykla, iš saugyklos katalogo įveskite šiuos duomenis:

 git config receive.denyDeleteCurrent ignore 

Darbo vietoje:

 git branch -m master vabandoned # Rename master on local git branch -m newBranch master # Locally rename branch newBranch to master git push origin :master # Delete the remote master git push origin master:refs/heads/master # Push the new master to the remote git push origin abandoned:refs/heads/abandoned # Push the old master to the remote 

Atgal į serverį, kuriame yra origin saugykla:

 git config receive.denyDeleteCurrent true 

Pasiskaitykite tinklaraščio autoriui http://www.mslinn.com/blog/?p=772

1
28 сент. Atsakymą pateikė ScottG Sep 28 2012-09-28 16:13 '12, 16:13 2012-09-28 16:13

Kiti klausimai apie žymes arba Užduoti klausimą