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?
Bare gjør det:
eller hvis du har en spesifikk repo:
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åvil også fungere.
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 derettergit 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.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.