Tilbakestille fjernkontroll til en bestemt forpliktelse

Jeg vil forkaste alle endringer gjort etter commit <commit-hash> . Så jeg gjorde det:

git reset --hard <commit-hash>

Nå vil jeg gjøre det samme med fjernkontrollen min. Hvordan kan jeg gjøre dette? Jeg har gjort noen commits (og pushes) etter <commit-hash> og jeg vil bare forkaste dem alle. Er bare noe gikk forferdelig galt i veien, og jeg vil ikke gjøre det verre enn det allerede er;(

Jeg vil i utgangspunktet spole tilbake min origin / master til <commit-hash>

Løsning

Forutsatt at filialen din kalles master både her og eksternt, og at fjernkontrollen din kalles origin, kan du gjøre det:

 git reset --hard 
 git push -f origin master

Du bør imidlertid unngå å gjøre dette hvis noen andre jobber med det eksterne depotet ditt og har hentet endringene dine. I så fall vil det være bedre å revert de commitene du ikke vil ha, og deretter push som normalt.

Oppdatering: du har forklart nedenfor at andre mennesker har trukket endringene du har presset, så det er bedre å opprette en ny forpliktelse som reverserer alle disse endringene. Det er en fin forklaring på alternativene dine for å gjøre dette i dette svaret fra Jakub Narębski. Hvilken som er mest praktisk, avhenger av hvor mange kommitteringer du vil tilbakestille, og hvilken metode som gir mest mening for deg.

Siden det fra spørsmålet ditt er klart at du allerede har brukt git reset --hard for å tilbakestille master-grenen, må du kanskje begynne med å bruke git reset --hard ORIG_HEAD for å flytte grenen tilbake til der den var før. (Som alltid med git reset --hard, sørg for at git status er ren, at du er på riktig gren og at du er klar over git reflog som et verktøy for å gjenopprette tilsynelatende tapte commits). Du bør også sjekke at ORIG_HEAD peker til riktig commit, med git show ORIG_HEAD.

Feilsøking:

Hvis du får en melding som "! [remote rejected] a60f7d85 -> master (pre-receive hook declined)"

så må du tillate omskriving av grenhistorikk for den spesifikke grenen. I BitBucket sto det for eksempel "Rewriting branch history is not allowed". Det er en avkrysningsboks som heter Tillat omskriving av grenhistorikk som du må merke av for.

Kommentarer (12)

Bruk de andre svarene hvis du ikke har noe imot å miste lokale endringer. Denne metoden kan fortsatt ødelegge fjernkontrollen hvis du velger feil commit-hash å gå tilbake til.

Hvis du bare vil få fjernkontrollen til å matche en commit som allerede er i din lokale gren:

  1. Ikke ikke gjør noen tilbakestilling.

  2. Bruk git log for å finne hashen til overføringen du vil at den eksterne skal være på. git log -p for å se endringer, eller git log --graph --all --oneline --decorate for å se et kompakt tre (å ha det siste som et alias i skallet ditt er veldig praktisk).

  3. Kopier hashen.

  4. Kjør en kommando som:

     git push --force  :

    f.eks.

     git push --force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master
Kommentarer (11)

Jeg løste problemet som ditt med disse kommandoene:

git reset --hard  
git push -f  : 
Kommentarer (0)