Pervardykite vietinio ir nuotolinio „Git“ saugyklas

Turiu master filialą, kuris seka nuotolinės origin/master filialą.

Noriu juos pervadinti į master-old tiek vietinius master-old tiek nuotoliniu būdu. Ar tai įmanoma Kitiems naudotojams, kurie sekė origin/master (ir kurie visada atnaujino savo vietinį master filialą per „ git pull ), kas nutinka, kai pervadinau nuotolinį filialą? Ar jų git pull vis dar dirbs arba sukels klaidą, kad nebegali rasti origin/master ?

Tada, toliau, noriu sukurti naują master filialą (tiek vietiniu, tiek nuotoliniu būdu). Vėlgi, po to, kai tai padariau, kas atsitiks, jei kiti vartotojai git pull ?

Manau, visa tai sukels didelių problemų. Ar yra švarus būdas gauti tai, ko noriu? Arba turėčiau tiesiog palikti master nes jis yra, ir sukurti naują master-new filialą ir tiesiog tęsti darbą?

704
06 окт. nustatė Albert 06 okt. 2009-10-06 19:51 '09, 19:51 PM 2009-10-06 19:51
@ 13 atsakymų

Artimiausias dalykas, kurį reikia pervardyti, yra ištrinti ir tada iš naujo sukurti nuotolinio valdymo pulte. Pavyzdžiui:

533
06 окт. atsakymas, kurį pateikė bdonlan 06 spalis 2009-10-06 20:35 '09 ne 20:35 2009-10-06 20:35

Darant prielaidą, kad šiuo metu esate master :

 git push origin master:master-old # 1 git branch master-old origin/master-old # 2 git reset --hard $new_master_commit # 3 git push -f origin # 4 
border=0
  • Pirma, sukurkite master-old filialą origin duomenų saugykloje, remdamiesi master vietos saugykloje nustatymu.
  • Sukurkite naują vietinį filialą šiai naujai origin/master-old filialui (kuris bus automatiškai konfigūruojamas kaip stebėjimo filialas).
  • Dabar nukreipkite vietinį master į tai, ką norite, kad jis nurodytų.
  • Galiausiai, pakeiskite master origin saugykloje, kad atspindėtumėte naująjį vietinį master .

(Jei tai padarysite bet kuriuo kitu būdu, jums reikės bent dar vieno žingsnio, kad įsitikintumėte, jog master-old teisingai sukonfigūruotas sekti origin/master-old . Nė vienas iš kitų sprendimų, paskelbtų šio rašymo metu.)

231
24 сент. atsakymas pateikiamas Aristotelio Pagaltzio 24 rugsėjo 2010-09-24 23:21 '10, 11:21 val. 2010-09-24 23:21

Git v1.7 manau, kad tai šiek tiek pasikeitė. Vietos filialo stebėjimo nuorodos atnaujinimas į naują konsolę dabar yra labai paprasta.

 git branch -m old_branch new_branch # Rename branch locally git push origin :old_branch # Delete the old branch git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote 
128
25 апр. atsakymas pateiktas Excalibur 25 d 2013-04-25 20:22 '13, 20:22, 2013-04-25 20:22
 git checkout -b new-branch-name git push remote-name new-branch-name :old-branch-name 

Prieš ištrindami old-branch-name gali tekti rankiniu būdu pereiti prie new-branch-name old-branch-name

35
10 февр. Atsakymas pateikiamas Treken 10 vasario mėn. 2012-02-10 05:29 '12 at 5:29 2012-02-10 05:29

Yra daug būdų, kaip pervadinti filialą, bet aš sutelksiu dėmesį į rimtesnę problemą: „kaip leisti klientams greitai persiųsti ir nesikreipti į savo filialus“.

Pirmasis greitas vaizdas: 2019

Manau, kad vis dar klausiate apie tą pačią situaciją kaip ir ankstesniame klausime. Tai reiškia, kad naujasis šeimininkas istorijoje neturės senojo šeimininko. * Jei paskambinsite į pagrindinį-naują „šeimininką“, jūs efektyviai perrašysite istoriją. Nesvarbu, kaip jūs pateksite į būseną, kurioje šeimininkas nėra ankstesnės kapitono padėties palikuonis, paprasčiausiai todėl, kad jis yra šioje būsenoje.

Kiti naudotojai, kurie bando ištraukti, kai kapitonas neegzistuoja, paprasčiausiai nepavyks (nėra tokios nuorodos į konsolę), o kai tik jis vėl pasirodys naujame mieste, jų traukos bandys sujungti savo šeimininką su nauju nuotoliniu valdikliu. taip, tarsi jūs sujungėte pagrindinį senąjį ir šeimininką naują savo saugykloje. Atsižvelgiant į tai, ką bandote padaryti, susijungimas turės konfliktų. (Jei jie būtų išspręsti ir rezultatas būtų grąžinamas į saugyklą, būsite dar blogesnėje būsenoje - abiejose istorijos versijose yra.)

Norėdami atsakyti į jūsų klausimą, paprasta: jūs turite pripažinti, kad kartais jūsų istorijoje bus klaidų. Tai normalu. Kas neįvyksta. Įsipareigojimai buvo grąžinti į git.git saugyklą. Svarbu, kad kai tik paskelbsime istoriją, tai viskas, ką galite pasitikėti.

* Jei taip būtų, tai būtų lygiavertė tam tikriems kapitono pakeitimams ir tada sukurti naują filialą, kur jis buvo anksčiau. Jokių problemų.

10
06 окт. Jefromi spalio 6 d. atsakymas 2009-10-06 20:12 '09 ne 20:12 2009-10-06 20:12

Pasirinktas atsakymas nepavyko, kai bandžiau jį. Tai sukelia klaidą: refusing to delete the current branch: refs/heads/master . Manau, kad paskelbsiu, kas veikia man:

 git checkout master # if not in master already git branch placeholder # create placeholder branch git checkout placeholder # checkout to placeholder git push remote placeholder # push placeholder to remote repository git branch -d master # remove master in local repository git push remote :master # remove master from remote repository. 

Prieš siunčiant ją į nuotolinį saugyklą, tai yra tikrinimas, ar žymės teisingai. Likusi dalis yra savaime suprantama, pašalinus pagrindinį filialą ir paspaudus nuotolinį saugyklą, turėtų veikti. Ištrauka iš čia .

8
25 дек. Atsakymą pateikė Hendra Uzia gruodžio 25 d. 2011-12-25 15:28 '11, 15:28, 2011-12-25 15:28

Geras Mano 2 centai. Kaip apie prisijungimą prie serverio, į git katalogą ir filialo pervadinimą tuščioje saugykloje. Ji neturi visų problemų, susijusių su vieno filialo perkrovimu. Tiesą sakant, „klientai“ automatiškai atpažįsta pakeistą pavadinimą ir pakeičia ištrintą nuorodą. Vėliau (arba anksčiau) taip pat galite pakeisti vietinį filialo pavadinimą.

3
24 дек. Atsakymą pateikė user458577 24 Dec. 2010-12-24 07:50 '10, 7:50, 2010-12-24 07:50

Kaip apie:

 git checkout old-branch-name git push remote-name new-branch-name git push remote-name :old-branch-name git branch -m new-branch-name 
1
17 авг. Hannes Tydén atsakė į rugpjūčio 17 d. 2010-08-17 11:21 '10, 11:21 val. 2010-08-17 11:21

Galite atlikti šiuos veiksmus:

 git -m master master-old #rename current master git checkout -b master #create a new branch master git push -f origin master #force push to master 

Tačiau stūmimas yra bloga idėja, jei kiti žmonės naudoja šį saugyklą. Paspaudus stipriai, jų peržiūros istorija prieštarauja naujam.

0
16 авг. atsakymas, kurį pateikė Riyafa Abdul Hameed 16 rug . 2017-08-16 17:04 '17, 17:04 pm 2017-08-16 17:04

Gerai , filialo pervadinimas tiek vietiniu, tiek nuotoliniu būdu yra gana paprastas! ...

Jei esate filiale, galite:

git branch -m <branch>

arba jei ne, jums reikia:

git branch -m <your_old_branch> <your_new_branch>

Tada spustelėkite nuotolinį ištrynimą taip:

git push origin <your_old_branch>

Dabar baigsite, jei bandant stumti, turite paleisti klaidą, tiesiog paleiskite:

git push --set-upstream origin <your_new_branch>

Taip pat sukursiu žemiau esantį paveikslėlį, kad galėčiau parodyti veiksmus realioje komandinėje eilutėje, tiesiog atlikite veiksmus ir būsite gerai:

2019

Manau, kad svarbiausia yra suvokimas, kad jūs darote dvigubą pervadinimą: master į master-old , taip pat master-new master .

Iš visų kitų atsakymų aš apibendrinau tai:

 doublerename master-new master master-old 

kur pirmiausia turite apibrėžti „ doublerename Bash“ funkciją:

 # doublerename NEW CURRENT OLD # - arguments are branch names # - see COMMIT_MESSAGE below # - the result is pushed to origin, with upstream tracking info updated doublerename() { local NEW=$1 local CUR=$2 local OLD=$3 local COMMIT_MESSAGE="Double rename: $NEW -> $CUR -> $OLD. This commit replaces the contents of '$CUR' with the contents of '$NEW'. The old contents of '$CUR' now lives in '$OLD'. The name '$NEW' will be deleted. This way the public history of '$CUR' is not rewritten and clients do not have to perform a Rebase Recovery. " git branch --move $CUR $OLD git branch --move $NEW $CUR git checkout $CUR git merge -s ours $OLD -m $COMMIT_MESSAGE git push --set-upstream --atomic origin $OLD $CUR :$NEW } 

Tai panaši į besikeičiančio git rebase istoriją, nes filialo turinys yra visiškai kitoks, tačiau skiriasi tuo, kad klientai gali saugiai judėti pirmyn naudodami git pull master .

-1
28 июля '16 в 18:35 2016-07-28 18:35 Atsakymą pateikė Martin Vidner, liepos 16 d., 16 val., 18:35, 2016-07-28 18:35
 git update-ref newref oldref git update-ref -d oldref newref 
-3
10 авг. atsakymas suteiktas 10 d. 2010-08-10 15:14 '10, 15:14, 2010-08-10 15:14

Kiti klausimai apie „ žymes arba „ Užduoti klausimą“