Kaip priversti Git?

Įdiegiau nuotolinį ne „pagrindinį“ repo ir klonavau jį į savo kompiuterį. Atlikau keletą vietinių pakeitimų, atnaujinau savo vietos saugyklą ir pakeitiau pakeitimus į savo nuotolinį repo. Viskas iki šiol buvo gera.

Dabar turėjau kažką pakeisti nuotoliniu atpirkimo sandoriu. Tada aš kažką pakeitiau savo vietinėje repo. Supratau, kad perėjimas prie nuotolinio repo nebuvo reikalingas. Taigi aš bandžiau git push savo vietinį repo į savo nuotolinį atpirkimą, bet aš gavau klaidą, pavyzdžiui:

Taigi, kad neprarastumėte istorijos, naujinimai be persiuntimo buvo ištrinti, kai vėl susijungėte. Išsamiau žr.

Galbūt aš maniau

 git push --force 

bus priversti mano vietinę kopiją stumti pakeitimus į nuotolinį ir padaryti tą patį. Tai verčia atnaujinimus , bet kai grįšiu į nuotolinį atpirkimą ir įvykdau, pastebiu, kad failuose yra pasenusių pakeitimų (tie, kurie anksčiau turėjo pagrindinį nuotolinį repo).

Kaip minėjau pastabose dėl vieno iš atsakymų :

[I] bandė priversti, bet grįžus į pagrindinį serverį, kad išsaugotumėte pakeitimus, gaunu pasenusią formuluotę. Taigi, taisydamas saugyklas, tai nėra tas pats dalykas. Ir kai aš bandau naudoti „git push“ dar kartą, gaunu tą pačią klaidą.

Kaip išspręsti šią problemą?

773
01 апр. Spyros nustatė 01 Bal 2011-04-01 08:35 '11 at 8:35 2011-04-01 08:35
@ 7 atsakymai

Tiesiog sekite:

 git push origin <your_branch_name> --force 

arba jei turite tam tikrą atpirkimo sandorį:

 git push https://git.... --force 

Tai pašalins jūsų ankstesnius įsipareigojimus ir spustelės dabartinį.

Tai gali būti neteisinga, bet jei kas nors atėjo į šį puslapį, maniau, kad reikalingas paprastas sprendimas ...

Trumpa vėliava

Taip pat atkreipkite dėmesį, kad -f yra trumpas: - --force

 git push origin <your_branch_name> -f 

taip pat veiks.

1436
27 сент. Atsakymas suteikiamas Kayvar 27 sep . 2012-09-27 00:31 '12 - 0:31 2012-09-27 00:31

Ir jei push --force neveikia, galite push --delete . Žiūrėkite 2 eilutę šiuo atveju:

 git revert -n HEAD~3..HEAD # prepare a new commit reverting last 3 commits git commit -m "sorry - revert last 3 commits because I was not careful" git push origin master # regular push 

Tiesą sakant, tiek pradinėse HEAD (iš grįžtamojo, tiekblogo atkūrimo ) bus tie patys failai.

border=0

pakeisti atnaujintą informaciją ir daugiau argumentų apie „ push --force

Apsvarstykite galimybę stumti jėgas, o ne paspaudus, bet vis tiek norėtumėte grįžti

Kita push --force gali sukelti kažką stumti prieš jus, bet po to, kai jau pasirinkote. Jei paspausite atnaujintos versijos galią, dabar pakeisite darbą su kitais .

git push --force-with-lease pristatytas 1.8.5 git ( dėka @VonC komentarų šiuo klausimu) bando išspręsti šią konkrečią problemą. Iš esmės, tai sukels klaidą, o ne paspaudimą, jei nuotolinio valdymo pultas buvo pakeistas po paskutinio mėginio.

Tai gerai, jei tikrai įsitikinote, kad push --force , bet vis tiek norite išvengti daugiau problemų. Sakyčiau, kad tai turėtų būti numatytasis push --force elgesys. Bet tai toli gražu nėra pasiteisinimas push . Žmonės, kurie pasiekė savo sukilėlius, vis dar turės daug problemų, kurias būtų galima lengvai išvengti, jei grįžtumėte.

Ir kadangi mes kalbame apie git --push atvejus ...

Kodėl kažkas nori stumti?

@linquize parodė gerą prievartos jėgos pavyzdį komentaruose: konfidencialūs duomenys . Jūs klaidingai nutekėjote į duomenis, kurie neturėtų būti interpretuojami. Jei esate pakankamai greitas, galite jį pataisyti paspausdami aukštyn mygtuką.

* Duomenys vis dar bus nuotoliniame kompiuteryje, jei taip pat nerenkate šiukšlių ar valote . Taip pat yra akivaizdus potencialas kitiems skleisti jį, kuris jau jį įgijo, bet suprantate idėją.

174
23 мая '13 в 1:03 2013-05-23 01:03 atsakymą Cregox pateikia gegužės 13 d., 13 val., 13:03 2013-05-23 01:03

Visų pirma, nepadariau jokių tiesioginių pakeitimų „pagrindiniame“ repo. Jei tikrai norite turėti „pirminę“ repo, tuomet jums reikia tik paspausti ant jo, nekeiskite jos tiesiogiai.

Ar gausite klaidą, ar išbandėte „ git pull iš vietinės repo, o tada git push į pagrindinį repo? Ką jūs darote dabar (jei suprantu, kad tai gerai) daro spaudimą, o tada praranda „pagrindinio“ repo pakeitimus. Pirmiausia reikia susieti pokyčius vietoje.

15
01 апр. atsakymas pateikiamas ubik 01 balandžio. 2011-04-01 08:42 '11 at 8:42 2011-04-01 08:42

Jei aš esu savo vietiniame skyriuje A ir noriu, kad vietinis filialas B būtų pradėtas C pradžioje, galiu naudoti šią sintaksę:

 git push --force origin B:C 
11
28 мая '15 в 21:25 2015-05-28 21:25 atsakymas duotas IcedDante gegužės 28 d. 15:25 2015-05-28 21:25

Norėčiau rekomenduoti:

  • spustelėkite tik pagrindinį repo

  • įsitikinkite, kad pagrindinis atpirkimo sandoris yra neužtikrintas atpirkimas , kad niekada nesukeltų problemų dėl to, kad pagrindinis repo medis nėra sinchronizuojamas su .git baze. Žr. „ Kaip perkelti vietinį git saugyklą į kitą kompiuterį?

  • Jei jums reikia keisti pagrindinį (plikas) repo, klonuokite jį (pagrindiniame serveryje), atlikite pakeitimus ir grįžkite į jį

Kitaip tariant, išsaugokite atvirą repo, kuris yra prieinamas tiek iš pagrindinio serverio, tiek iš vietinio kompiuterio, kad galėtumėte turėti vieną iš anksto pateiktą repo iš / į kurį reikia ištraukti / traukti.

9
01 апр. atsakymas pateikiamas VonC 01 balandžio. 2011-04-01 08:53 '11 at 8:53 2011-04-01 08:53

Tai buvo mūsų sprendimas pakeisti vedlį gitHub įmonių saugykloje, išlaikant istoriją.

push -f valdyti įmonių skliautus dažnai yra neleidžiama išsaugoti šakos istoriją. Šis sprendimas mums buvo naudingas.

 git fetch desiredOrigin git checkout -b master desiredOrigin/master // get origin master 

 git checkout currentBranch // move to target branch git merge -s ours master // merge using ours over master // vim will open for the commit message git checkout master // move to master git merge currentBranch // merge resolved changes into master 

spustelėkite savo desiredOrigin filialą ir sukurkite PR

3
27 мая '16 в 0:31 2016-05-27 00:31 atsakymas suteiktas mihai gegužės 27 d., 16 d., 0:31 2016-05-27 00:31

naudoti šią komandą:

 git push -f origin master 
0
10 апр. Mustafa Elsayed atsakymas, pateiktas balandžio 10 d 2017-04-10 17:00 „17 val. 5 val

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