Kako pravilno izvedem potiskanje Git?

Vzpostavil sem oddaljeno ne-bare "main" repo in ga kloniral na svoj računalnik. Naredil sem nekaj lokalnih sprememb, posodobil lokalno skladišče in spremembe prenesel nazaj v oddaljeno skladišče. Do takrat je bilo vse v redu.

Zdaj sem moral nekaj spremeniti v oddaljenem repu. Nato sem nekaj spremenil v svoji lokalni zbirki. Ugotovil sem, da sprememba v oddaljenem repu ni potrebna. Zato sem poskušal git push iz lokalne repozitnice v oddaljeno repozitnico, vendar sem dobil napako, kot je:

Da bi preprečili izgubo zgodovine, so bile posodobitve brez hitrega posredovanja

zavrnjeno Združitev oddaljenih sprememb pred ponovnim potiskanjem. Oglejte si 'Opomba o hitrem napredovanju' v razdelku git push --help za podrobnosti.

Mislil sem, da je verjetno

git push --force

bi moja lokalna kopija prisilila, da spremembe prenese v oddaljeno kopijo in jo naredi enako. Preseneti posodobitev, toda ko se vrnem na oddaljeno repozitorij in opravim oddajo, opazim, da datoteke vsebujejo zastarele spremembe (tiste, ki jih je prej imel glavni oddaljeni repozitorij).

Kot sem omenil v komentarjih k enemu od odgovorov:

Ko se vrnem v glavni strežnik, da bi shranil spremembe, dobim zastarelo preslikavo. Tako, ko oddam skladišča, skladišča niso enaka. In ko poskušam ponovno uporabiti funkcijo git push, dobim enako napako.

Kako lahko odpravim to težavo?

Rešitev

Preprosto naredite:

git push origin  --force

ali če imate določen repozitorij:

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

To bo izbrisalo vaše prejšnje oddaje in potisnilo vašo trenutno.

Morda ni pravilno, a če kdo naleti na to stran, je mislil, da želi preprosto rešitev...

Kratka zastavica

Upoštevajte tudi, da je -f kratica za --force, torej

git push origin  -f

bo prav tako delovalo.

Komentarji (12)

Prvič, ne bi delal nobenih sprememb neposredno v repu "main". Če res želite imeti "glavni" repro, potem ga morate le potiskati vanj, nikoli pa ga neposredno spreminjati.

V zvezi z napako, ki jo dobivate, ali ste poskusili z git pull iz lokalnega repozitorija in nato git push v glavni repozitorij? To, kar trenutno počnete (če sem dobro razumel), je, da vsiljujete potiskanje in nato izgubite svoje spremembe v "glavnem" repu. Spremembe bi morali najprej združiti lokalno.

Komentarji (4)

Resnično priporočam:

  • potisnite samo v glavno skladišče

  • poskrbite, da je glavna repoteka gola repoteka, da ne bi nikoli imeli težav z delovnim drevesom glavne repoteke, ki ni sinhronizirano z njeno bazo .git. Glejte "Kako premakniti lokalno skladišče git v drug računalnik?"

  • Če morate spremeniti glavno (golo) skladišče, ga klonirajte (v glavnem strežniku), opravite spremembe in ga potisnite nazaj

Z drugimi besedami, ohranite goli repozitorij, ki je dostopen tako z glavnega strežnika kot z lokalnega računalnika, da boste imeli en sam repozitorij, iz katerega/za katerega lahko vlečete/potegnete.

Komentarji (1)