Hvordan fremtvinger jeg et Git-push korrekt?

Jeg har oprettet en fjernbetjent ikke-bare "main" repo og klonet den til min computer. Jeg foretog nogle lokale ændringer, opdaterede mit lokale repository og skubbede ændringerne tilbage til min fjernrepo. Tingene var fine indtil dette punkt.

Nu skulle jeg ændre noget i det eksterne repo. Så ændrede jeg noget i mit lokale repo. Det gik op for mig, at ændringen i det eksterne repo ikke var nødvendig. Så jeg forsøgte at git push fra mit lokale repo til mit fjernrepo, men jeg fik en fejl som f.eks:

For at forhindre, at du mister historik, blev ikke-fast-forward opdateringer afvist Flet de eksterne ændringer, før du pusher igen. Se 'Bemærk about fast-forwards' afsnittet i git push --help for detaljer.

Jeg tænkte, at det nok var en

git push --force

ville tvinge min lokale kopi til at skubbe ændringer til den eksterne kopi og gøre den ens. Det tvinger opdateringen, men når jeg går tilbage til den eksterne repo og laver et commit, bemærker jeg, at filerne indeholder forældede ændringer (dem, som den primære eksterne repo tidligere havde).

Som jeg nævnte i [kommentarer til et af svarene] (https://stackoverflow.com/questions/5509543/how-do-i-properly-force-a-git-push#comment6275726_5509588):

[Jeg] prøvede at tvinge, men når jeg går tilbage til hovedserveren for at gemme ændringerne, får jeg forældede staging. Således er repositorierne ikke de samme, når jeg committerer. Og når jeg prøver at bruge git push igen, får jeg den samme fejl.

Hvordan kan jeg løse dette problem?

Løsning

Det skal du bare gøre:

git push origin  --force

eller hvis du har en specifik repo:

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

Dette vil slette dine tidligere commit(s) og skubbe dit nuværende.

Det er måske ikke helt korrekt, men hvis nogen falder over denne side og tænkte, at de måske ville have en simpel løsning...

Kort flag

Bemærk også at -f er en forkortelse for --force, så

git push origin  -f

vil også fungere.

Kommentarer (12)

Først og fremmest ville jeg ikke foretage nogen ændringer direkte i "main" repo'en. Hvis du virkelig ønsker at have en "main" repo, så bør du kun pushe til den, aldrig ændre den direkte.

Med hensyn til den fejl du får, har du så prøvet git pull fra din lokale repo, og derefter git push til hovedrepo'en? Det du gør i øjeblikket (hvis jeg har forstået det rigtigt) er at tvinge push'et frem og derefter miste dine ændringer i "main" repo'en. Du bør sammenføje ændringerne lokalt først.

Kommentarer (4)

Jeg vil virkelig anbefale det til:

  • push kun til hovedrepo'en

  • at sikre, at hovedrepo'en er en bare repo, så der aldrig opstår problemer med, at hovedrepo'ens arbejdstræ ikke er synkroniseret med dens .git-base. Se "Hvordan skubbes et lokalt git-repository til en anden computer?"

  • Hvis du skal lave ændringer i hovedrepo'et (bare), så klon det (på hovedserveren), lav dine ændringer og push tilbage til det

Med andre ord, hold et bare repo tilgængeligt både fra hovedserveren og den lokale computer, for at have et enkelt opstrøms repo, som du kan trække/trække fra/til.

Kommentarer (1)