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>
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 <commit-hash>
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.
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:
Ikke ikke gjør noen tilbakestilling.
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).
Kopier hashen.
Kjør en kommando som:
git push --force <remote> <the-hash>:<the remote branch>
f.eks.
git push --force origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master