Hvordan tvinger jeg en Git-push på riktig måte?

Jeg har satt opp en ekstern ikke-bare " main " repo og klonet den til datamaskinen min. Jeg gjorde noen lokale endringer, oppdaterte det lokale depotet mitt og sendte endringene tilbake til det eksterne depotet mitt. Ting var bra opp til det punktet.

Nå måtte jeg endre noe i det eksterne depotet. Så endret jeg noe i mitt lokale repo. Jeg innså at endringen til den eksterne repoen ikke var nødvendig. Så jeg prøvde å git push fra min lokale repo til min eksterne repo, men jeg fikk en feil som:

For å forhindre at du mister historikken, ble ikke-fast-forward-oppdateringer avvist Slå sammen de eksterne endringene før du skyver igjen. Se 'Merknad om fast-forwards' delen av git push --help for detaljer.

Jeg trodde at sannsynligvis en

git push --force

ville tvinge min lokale kopi til å skyve endringer til den eksterne og gjøre det samme. Det tvinger oppdateringen , men når jeg går tilbake til den eksterne repoen og gjør en commit, legger jeg merke til at filene inneholder utdaterte endringer (de som den viktigste eksterne repoen tidligere hadde).

Som jeg nevnte i kommentarene til et av svarene:

[Jeg] prøvde å tvinge, men når jeg går tilbake til hovedserveren for å lagre endringene, får jeg utdatert iscenesettelse. Så når jeg forplikter depotene er ikke de samme. Og når jeg prøver å bruke git push igjen, får jeg den samme feilen.

Hvordan kan jeg løse dette problemet?

Løsning

Bare gjør det:

git push origin  --force

eller hvis du har en spesifikk repo:

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

Dette vil slette din(e) tidligere commit(s) og skyve din nåværende.

Det er kanskje ikke riktig, men hvis noen snubler over denne siden, tenkte de kanskje vil ha en enkel løsning ...

Kort flagg

Legg også merke til at -f er en forkortelse for --force, så

git push origin  -f

vil også fungere.

Kommentarer (12)

Først og fremst vil jeg ikke gjøre noen endringer direkte i " main " repo. Hvis du virkelig vil ha en "main" -repo, bør du bare skyve til den, aldri endre den direkte.

Når det gjelder feilen du får, har du prøvd git pull fra din lokale repo, og deretter git push til hovedrepoen? Det du gjør for øyeblikket (hvis jeg forsto det godt) er å tvinge push og deretter miste endringene dine i &" main &" repo. Du bør slå sammen endringene lokalt først.

Kommentarer (4)

Jeg vil virkelig anbefale det:

  • skyv bare til hovedrepoen

  • sørg for at hovedrepoen er en bare repo, for å aldri ha noe problem med at hovedrepo-arbeidstreet ikke er synkronisert med .git-basen. Se "Hvordan skyve et lokalt git-depot til en annen datamaskin?"

  • Hvis du må gjøre endringer i hovedreposet (bare), kloner du det (på hovedserveren), gjør endringene og skyver tilbake til det.

Med andre ord, hold et nakent repo tilgjengelig både fra hovedserveren og den lokale datamaskinen, for å ha en enkelt oppstrøms repo som du kan trekke / trekke fra / til.

Kommentarer (1)