Afstandsbediening terugzetten op een bepaalde commit
Ik wil alle veranderingen weggooien die na commit <commit-hash>
gedaan zijn.
Dus dat heb ik gedaan:
git reset --hard <commit-hash>
Nu wil ik hetzelfde doen met mijn remote. Hoe kan ik dit doen? Ik heb een aantal commits (en pushes) gedaan na <commit-hash>
en ik wil ze gewoon allemaal weggooien. Er is gewoon iets verschrikkelijk fout gegaan en ik wil het niet erger maken dan het al is. ;(
Ik wil eigenlijk mijn origin/master
terugspoelen naar <commit-hash>
629
3
Ervan uitgaande dat je branch zowel hier als op afstand
master
heet, en dat je remoteorigin
heet, zou je kunnen doen:Je zou dit echter niet moeten doen als iemand anders met je remote repository werkt en jouw wijzigingen heeft opgehaald. In dat geval zou het beter zijn om revert de commits die je niet wilt, en dan normaal te pushen.
Update: je'hebt hieronder uitgelegd dat andere mensen de wijzigingen die jij'hebt gepushed hebben gepulled, dus het'is beter om een nieuwe commit te maken die al die wijzigingen terugdraait. Er'is een mooie uitleg van je opties om dit te doen in dit antwoord van Jakub Narębski. Welke het handigst is hangt af van hoeveel commits je terug wilt draaien, en welke methode voor jou het meest logisch is.
Aangezien uit je vraag duidelijk is dat je
git reset --hard
al gebruikt hebt om jemaster
branch terug te zetten, moet je misschien beginnen metgit reset --hard ORIG_HEAD
om je branch terug te zetten naar waar hij eerst was. (Zoals altijd metgit reset --hard
, zorg ervoor datgit status
schoon is, dat je op de juiste branch zit en dat jegit reflog
kent als een hulpmiddel om schijnbaar verloren commits te herstellen). Je zou ook moeten controleren datORIG_HEAD
naar de juiste commit wijst, metgit show ORIG_HEAD
.Problemen oplossen:
Als je een bericht krijgt als "! [remote rejected] a60f7d85 -> master (pre-receive hook declined)"
dan moet je branchgeschiedenis herschrijven toestaan voor de specifieke branch. In BitBucket stond er bijvoorbeeld "Herschrijven van takgeschiedenis is niet toegestaan". Er is een selectievakje genaamd
Herschrijven van takgeschiedenis toestaan
dat je moet aanvinken.Gebruik de andere antwoorden als je het niet erg vindt om lokale wijzigingen te verliezen. Deze methode kan nog steeds je remote vernielen als je de verkeerde commit hash kiest om naar terug te gaan.
Als je alleen de remote wilt laten overeenkomen met een commit die'al in je lokale branch zit:
Doe geen terugzetten.
Gebruik
git log
om de hash van de commit te vinden waar je de remote op wilt hebben.git log -p
om veranderingen te zien, ofgit log --graph --all --oneline --decorate
om een compacte boom te zien. (Die laatste als een alias in je shell hebben is erg handig).Kopieer de hash.
Voer een commando uit als:
b.v.
Ik loste een probleem als het jouwe op met deze commando's: