Ik'heb een remote niet-kale "main" repo opgezet en gecloned naar mijn computer. Ik heb wat lokale wijzigingen gemaakt, mijn lokale repository bijgewerkt, en de wijzigingen teruggezet naar mijn repo op afstand. Tot op dat moment ging alles goed.
Nu, moest ik iets veranderen in de remote repo. Toen veranderde ik iets in mijn lokale repo. Ik realiseerde me dat de wijziging in de remote repo niet nodig was. Dus probeerde ik git push
te doen van mijn lokale repo naar mijn repo op afstand, maar ik kreeg een foutmelding zoals:
Om te voorkomen dat je geschiedenis verliest, werden niet-fast-forward updates verworpen Merge de remote wijzigingen voordat je opnieuw pushed. Zie de 'Opmerking over fast-forwards' sectie van
git push --help
voor details.
Ik dacht dat waarschijnlijk een
git push --force
mijn lokale kopie zou dwingen om wijzigingen naar de remote repo te pushen en deze hetzelfde te maken. Het forceert de update, maar als ik terug ga naar de remote repo en een commit doe, zie ik dat de bestanden verouderde wijzigingen bevatten (wijzigingen die de remote repo al eerder had).
Zoals ik al zei in de commentaar bij een van de antwoorden:
[Ik] probeerde forceren, maar als ik terug ga naar de master server om de wijzigingen op te slaan, krijg ik verouderde staging. Dus, wanneer ik commit zijn de repositories niet hetzelfde. En als ik git push opnieuw probeer te gebruiken, krijg ik dezelfde foutmelding.
Hoe kan ik dit probleem oplossen?
Gewoon doen:
git push origin <your_branch_name> --force
of als je een specifieke repo hebt:
git push https://git.... --force
Dit zal je vorige commit(s) verwijderen en je huidige terugzetten.
Het is misschien niet juist, maar als iemand op deze pagina stuit, en denkt dat ze misschien een eenvoudige oplossing willen...
Merk ook op dat -f
een afkorting is voor -kracht
, dus
git push origin <your_branch_name> -f
zal ook werken.
Ten eerste, ik zou geen veranderingen direct in de "main" repo aanbrengen. Als je echt een "main" repo wilt hebben, dan moet je er alleen naar pushen, nooit direct in veranderen.
Wat betreft de fout die je krijgt, heb je git pull
geprobeerd van je lokale repo, en dan git push
naar de hoofd repo? Wat je nu doet (als ik het goed begrepen heb) is de push forceren en dan je wijzigingen in de "main" repo verliezen. Je zou de wijzigingen eerst lokaal moeten samenvoegen.
Ik zou het echt aanraden:
push alleen naar de hoofd repo
ervoor te zorgen dat de hoofd-repo een bare repo is, om nooit het probleem te hebben dat de werkboom van de hoofd-repo niet synchroon loopt met zijn .git
basis. Zie "Hoe push je een lokale git repository naar een andere computer?"
Als je wijzigingen moet maken in de hoofd (kale) repo, kloon hem dan (op de hoofdserver), doe je wijziging en push terug naar die repo
Met andere woorden, houd een kale repo toegankelijk vanaf zowel de hoofdserver als de lokale computer, om een enkele upstream repo te hebben van/naar waar je kunt trekken/pullen.