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>

Oplossing

Ervan uitgaande dat je branch zowel hier als op afstand master heet, en dat je remote origin heet, zou je kunnen doen:

 git reset --hard 
 git push -f origin master

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 je master branch terug te zetten, moet je misschien beginnen met git reset --hard ORIG_HEAD om je branch terug te zetten naar waar hij eerst was. (Zoals altijd met git reset --hard, zorg ervoor dat git status schoon is, dat je op de juiste branch zit en dat je git reflog kent als een hulpmiddel om schijnbaar verloren commits te herstellen). Je zou ook moeten controleren dat ORIG_HEAD naar de juiste commit wijst, met git 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.

Commentaren (12)

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:

  1. Doe geen terugzetten.

  2. 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, of git log --graph --all --oneline --decorate om een compacte boom te zien. (Die laatste als een alias in je shell hebben is erg handig).

  3. Kopieer de hash.

  4. Voer een commando uit als:

     git push --force  :

    b.v.

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

Ik loste een probleem als het jouwe op met deze commando's:

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